Страницы

Поиск по вопросам

четверг, 25 апреля 2019 г.

Почему ready() всегда выдает true?

Имеется такой код:
public static void main(String[] args) throws IOException { StringReader reader = new StringReader("Khoor Dpljr"); System.out.println(decode(reader, -3)); //Hello Amigo }
public static String decode(StringReader reader, int key) throws IOException { BufferedReader br = new BufferedReader(reader); while (br.ready()) { int b = br.read(); b = b + key; char c = (char) b; System.out.println(c); } return null; }
Почему ready() всегда выдает true?


Ответ

Потому что так написано в документации к этому методу
True if the next read() is guaranteed not to block for input, false otherwise
Перевод:
true, если гарантируется, что следующий вызов метода read() будет неблокирующим
Так как при достижении конца потока метод read сразу возвращает -1, то и ready() возвращает true

Чтобы код заработал, можно переписать его так:
int c; while ((c = bufferedReader.read()) != -1) { // ... }

Частичный перевод ответа @StephenC

Комментариев нет:

Отправить комментарий