سؤال

يقوم عميل Apache HTTP الخاص بي بقراءة البيانات من خادم يرسل دفق HTTP (في شكل بيانات مكثف) لنا.

لدي دفق إدخال وقارئ مخزن مؤقت للحصول على البيانات ، وقراءة هذه البيانات باستخدام طريقة قراءة البيانات المخزنة.

InputStream inputStream = httpEntity.getContent();
br= new BufferedReader(new InputStreamReader(inputStream));

while ((line = br.readLine()) != null) 

أريد إغلاق الاتصال إذا تلقيت استجابة خاطئة من الخادم.

لهذا أقوم بإنشاء TimerTask في فترة زمنية لإغلاق اتصالي. أقوم بتحليل الاستجابة في كل مرة أتلقها للتحقق مما إذا كانت الاستجابة صحيحة ، إذا كانت الاستجابة صحيحة ، فأنا أعيد تعيين جدول الجدول الزمني. إذا وجدت استجابة خاطئة في هذه الحالة ، فأنا لا أعيد تعيين timertask (ودع timertask يتم تنفيذها في الوقت الذي تم فيه تعيينه من قبل)

أريد أن أعرف ما إذا كان استخدام I/O غير المتواصل يمكن أن يساعد؟ أو أحتاج إلى مقاربة أخرى؟

المشكلة التي أراها هي نظرًا لأن الاتصال مفتوح ، فإن TimerTask الخاص بي غير قادر على إغلاق الاتصال. inputstream.close أو bufferreader.close كلاهما غير قادر على التنفيذ (يبدو أنه ينتظر بلا حدود)

هل كانت مفيدة؟

المحلول

BufferReader.close() سوف يغلق فقط inputstream ، والذي بدوره سوف يتصل inputStream.close(). وفقا ل API Java InputStream.close() لا يفعل شيئا. تحتاج إلى إغلاق المقبس ، أو أيا كان ما تقوم بتجريده httpEntity.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top