Имеется такой код:
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
Комментариев нет:
Отправить комментарий