Страницы

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

суббота, 15 февраля 2020 г.

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

#java #циклы


Имеется такой код:

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?
    


Ответы

Ответ 1



Потому что так написано в документации к этому методу: 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

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

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