Я могу посмотреть на BufferedReader?

Есть ли способ проверить если в BufferedReader объект - что-то для чтения? Что-то как C++ cin.peek().Спасибо.

18
задан bluish 7 March 2012 в 10:59
поделиться

7 ответов

Вы можете попробовать метод «boolean ready ()». Из документа API Java 6: «Буферизованный символьный поток готов, если буфер не пуст или если готов базовый символьный поток. "

BufferedReader r = new BufferedReader(reader);
if(r.ready())
{
   r.read();
}
14
ответ дан 30 November 2019 в 05:48
поделиться

Вы можете использовать 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
36
ответ дан 30 November 2019 в 05:48
поделиться

Вы можете использовать PushBackReader , чтобы прочитать символ, а затем «вернуть его». Таким образом, вы точно знаете, что там что-то было, не влияя на его общее состояние - «заглянуть».

1
ответ дан 30 November 2019 в 05:48
поделиться

Следующий код будет смотреть на первый байт в потоке. Должен подглядывать за вами.

BufferedReader bReader = new BufferedReader(inputStream);
bReader.mark(1);
int byte1 = bReader.read();
bReader.reset();
13
ответ дан 30 November 2019 в 05:48
поделиться

Обычная идиома - проверять в цикле, если 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();
    // ...
}
4
ответ дан 30 November 2019 в 05:48
поделиться

Ответ от pgmura (полагающийся на метод ready ()) прост и работает. Но имейте в виду, что это потому, что реализация метода Sun; что не совсем соответствует документации. Я бы не стал на это полагаться, если такое поведение критично. См. Здесь http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4090471 Я бы предпочел вариант PushbackReader.

1
ответ дан 30 November 2019 в 05:48
поделиться
BufferedReader br = new BufferedReader(reader);
br.mark(1);
int firstByte = br.read();
br.reset();
2
ответ дан 30 November 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: