Как лучше всего проверить, пуст ли читатель? - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно определить, является ли Reader пустым (не даст никаких данных), прежде чем передать читателю какую-либо внешнюю функцию.

Лучшее, что я могу придумать, - это обернуть Reader в BufferedReader, который гарантирует предоставление функциональности mark / reset, а затем пытается прочитать один символ перед сбросом потока в исходное положение.

BufferedReader buffered = new BufferedReader(myReader);
if (!isEmpty(buffered)) {
    someOtherFunction(buffered);
}

private boolean isEmpty(BufferedReader reader) throws IOException {
    reader.mark(1);
    int c = reader.read();
    reader.reset();
    return c < 0;
}

Есть ли лучший способ

1 Ответ

0 голосов
/ 21 ноября 2018

Используйте ready(), чтобы проверить, доступен поток для чтения или нет здесь документы

А также рекомендуется null проверить перед проверкой ready()

public boolean ready() throws IOException

Сообщает, готов ли этот поток для чтения.Буферизованный символьный поток готов, если буфер не пустой, или если основной символьный поток готов.

Примечание:

True, еслиследующее чтение () гарантированно не блокирует для ввода, иначе ложь.Обратите внимание, что возвращение false не гарантирует блокировку следующего чтения.

...