Невозможно закрыть поток HTTP при неправильном ответе - PullRequest
1 голос
/ 02 ноября 2010

Мой HTTP-клиент apache считывает данные с сервера, который отправляет нам потоковую передачу HTTP (в виде фрагментированных данных).

У меня есть входной поток и Buffered Reader для получения данных, и чтение этих данных с использованием метода readLine Buffered Data.

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

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

Я хочу закрыть соединение, если получаю неправильный ответ от сервера.

Для этого я создаю таймерную задачу через интервал времени, чтобы закрыть мое соединение. Я анализирую ответ каждый раз, когда получаю его, чтобы проверить правильность ответа, если ответ правильный, то я сбрасываю временную задачу. Если я нахожу неправильный ответ в этом случае, я не сбрасываю таймерную задачу (и не позволяю таймерной задаче выполнить время, на которое она была ранее установлена)

Я хочу знать, может ли помочь использование небуферизованного ввода-вывода? или мне нужен какой-то другой подход?

Проблема, которую я вижу, так как соединение открыто, моя таймерная задача не может закрыть соединение. inputStream.close или bufferReader.close не способны выполнить оба (кажется, что они бесконечно ждут)

1 Ответ

1 голос
/ 03 ноября 2010

BufferReader.close() закроет только inputStream, который в свою очередь вызовет inputStream.close(). Согласно java api InputStream.close() ничего не делает. Вам нужно закрыть сокет или что-то еще, что вы абстрагируете с помощью httpEntity.

...