Есть ли способ проверить если в BufferedReader
объект - что-то для чтения? Что-то как C++ cin.peek()
.Спасибо.
Вы можете попробовать метод «boolean ready ()». Из документа API Java 6: «Буферизованный символьный поток готов, если буфер не пуст или если готов базовый символьный поток. "
BufferedReader r = new BufferedReader(reader);
if(r.ready())
{
r.read();
}
Вы можете использовать PushbackReader . Используя это, вы можете прочитать символ, а затем не прочитать его. По сути, это позволяет вам отодвинуть его назад.
PushbackReader pr = new PushbackReader(reader);
char c = (char)pr.read();
// do something to look at c
pr.unread((int)c); //pushes the character back into the buffer
Вы можете использовать PushBackReader
, чтобы прочитать символ, а затем «вернуть его». Таким образом, вы точно знаете, что там что-то было, не влияя на его общее состояние - «заглянуть».
Следующий код будет смотреть на первый байт в потоке. Должен подглядывать за вами.
BufferedReader bReader = new BufferedReader(inputStream);
bReader.mark(1);
int byte1 = bReader.read();
bReader.reset();
Обычная идиома - проверять в цикле, если BufferedReader # readLine ()
не возвращает null
. Если достигнут конец потока (например, конец файла, сокет закрыт и т. Д.), Он возвращает null
.
Например.
BufferedReader reader = new BufferedReader(someReaderSource);
String line = null;
while ((line = reader.readLine()) != null) {
// ...
}
Если вы не хотите читать по строкам (что, кстати, является основной причиной выбора BufferedReader
), используйте вместо этого BufferedReader # ready ()
:
BufferedReader reader = new BufferedReader(someReaderSource);
while (reader.ready()) {
int data = reader.read();
// ...
}
Ответ от pgmura (полагающийся на метод ready ()) прост и работает. Но имейте в виду, что это потому, что реализация метода Sun; что не совсем соответствует документации. Я бы не стал на это полагаться, если такое поведение критично. См. Здесь http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4090471 Я бы предпочел вариант PushbackReader.
BufferedReader br = new BufferedReader(reader);
br.mark(1);
int firstByte = br.read();
br.reset();