Вот мой вопрос: нормальный цикл while выглядит так -
while(condition){statements}
и операторы выполняются до тех пор, пока условие не станет false
и цикл не завершится. Меня интересует логика такого утверждения:
while((a=b.readLine) != null) { ... }
В моем случае он используется в общении клиент-сервер. Условие иногда истинно, иногда нет, но цикл выглядит так, как будто он постоянно проверяет условие, и когда оно истинно, инструкции в {}
выполняются. Мне кажется, что цикл ожидает выполнения условия, а затем выполняет операторы. Это как-то связано с тем, как работают BufferedReader
и InputStreamReader
или как? Кроме того, кажется, что этот цикл никогда не заканчивается, он просто ждет, пока условие не станет true
, а затем запускает операторы, а затем снова ждет, когда условие будет true
, и т. Д. Я был бы благодарен за любые разъяснения.
null
на сервер, на который вы ссылаетесь, он отключится. - person 3kings   schedule 25.03.2016BufferedReader
при вызовеreadLine()
вернетnull
, когда исчерпает все строки файла - person Maljam   schedule 25.03.2016readLine()
возвращает значение null, что происходит в конце потока. См. Javadoc. - person user207421   schedule 25.03.2016a
для последующего использования перед проверкой значения. Это часть языка и не имеет отношения к классу. - person Peter Lawrey   schedule 25.03.2016readLine()
возвращает ноль, цикл завершается. - person user207421   schedule 25.03.2016readLine()
возвращается только тогда, когда он достигает новой строки потока close (). Если вы читаете сокет, но ничего подобного не происходит, он блокируется. - person Peter Lawrey   schedule 25.03.2016readLine()
блокирует ожидание закрытия данных или потока. - person Peter Lawrey   schedule 25.03.2016readLine()
. Он блокируется до тех пор, пока строка не будет передана, или до конца потока, или до тех пор, пока не произойдет исключение. Это называется блокировкой ввода-вывода. - person user207421   schedule 25.03.2016