2012-01-21 8 views
4

Я использую функцию чтения() InputStreamReader java. Когда я дойду до конца входного потока, я должен войти в свою переменную int значение -1, но вместо этого он переходит в блок. Почему я не получаю -1 в конце входного потока? (я отлаживал это письмо буквой, убедившись, что это действительно конец ввода и что разъем подключения жив).Почему блок InputStreamReader read() вместо возврата -1?

использует ГОТОВ функции() хорошее решение, выполнив:

if (isr.ready()) 
    currCharVal = isr.read(); 

Спасибо заранее, Гай.

+0

Что такое «InputStream»? Можете ли вы разместить больше кода, пожалуйста? –

+0

Определите «конец» входного потока - потоки могут быть любыми, включая что-то вроде бесконечного сетевого соединения. Способ обработки зависит от типа потока. –

+0

«... гнездо подключения живое» - до тех пор, пока разъем не закрыт, вы не достигли конца входного потока до разъема. – Mat

ответ

4

Это произойдет, если другой конец не закрывает соединение. Когда сокет будет закрыт, read() вернет -1.

Использование готового и доступного в моем опыте довольно непредсказуемо. Я бы просто прочитал (byte []), пока не будет достигнут конец, и ожидаем, что конец будет закрыт, когда закончится.

+0

Мне нужно поддерживать соединение живым, потому что ответ генерируется в соответствии с вводом. Поэтому я понимаю, почему -1 не является хорошим способом узнать, когда ввод завершен. Есть ли другой способ определить, когда клиент прекратил отправлять данные httprequest в моем токенизаторе? – Guy

+0

Я бы предположил, что вам дана длина контента, чтобы знать, когда она закончит этот ответ. Вы не можете отправить поток '-1'. –