2016-10-08 9 views
0

Я фрагментчтения InputStream сокета

try { 
    is = new BufferedReader(new inputStreamReader(getSocket().getInputStream())); 
} 
catch(IOException e) {} 
while(true) {println(is.readLine());} 

В принципе, я Тринг Println каждое сообщение, которое посылается на входной поток сокета возвращается из getSocket(). Мой вопроса:

  1. Если нет сообщения, отправленного на сокет, какое значение возвращается вызова метода ReadLine()? Это нулевое значение или нулевая строка (т. Е. "") Или это что-то еще?
  2. Когда сообщение было отправлено и распечатано , что произошло с входным потоком сокета? Опустошен ли он?
  3. Нужно ли способ проверить на только вызов метода println() только тогда, когда входной поток HAS что-то распечатать?

ответ

-1
  1. Если ничего не отправлено через поток - читать пока нечего. Ваш читатель просто ждет.
  2. Он освобождается только от полученных вами данных.
  3. Вы должны иметь петлю while(true), которая пытается прочитать строку из потока. Вам не нужно ничего проверять.

Если розетка закрыта со второй стороны, считывающее устройство считывает null. Если вторая сторона вышла без закрытия розетки, вы получите IOException.

+0

Спасибо большое! Но я хотел бы больше узнать в 1-м ответе. Что вы ожидаете? Если у меня есть (true) {println ("debug"); Println (is.readLine()); }, то до того, как первое сообщение будет отправлено в поток, сколько «debug» s распечатывается? –

+0

@TranTriet только один. –

+0

@TranTriet посмотреть, как сервер написан здесь: https://systembash.com/a-simple-java-tcp-server-and-tcp-client/ Существует цикл, который слушает клиент. После того, как клиент подключен, программа продолжает ждать с помощью метода readLine(). –

0

Если сообщение не отправлено в сокет, какое значение возвращается из вызова метода readLine()? Является ли это нулевым значением или пустой строкой (т. Е. «») Или это что-то еще?

Ни то, ни другое. Он блокирует.

Когда сообщение было отправлено и распечатано, что произошло с входным потоком сокета? Опустошен ли он?

No. Полученные данные были удалены из него. Ожидается, что ожидающие ожидающие данные ожидания будут прочитаны.

Нужно ли нам проверять только вызов метода println() только в том случае, если входной поток имеет что-то для распечатки?

Нет. Он блокируется до тех пор, пока не будет получена линия, не закончится поток потока или не будет выбрано исключение IOException.

Неправильный цикл чтения. Он не обнаруживает конец потока. Обычный способ написать это:

while ((line = in.readLine()) != null) 
    // ... 

 Смежные вопросы

  • Нет связанных вопросов^_^