Может ли BufferedReader.read(char[], int, int) возвращать 0?

#java #bufferedreader

#java #bufferedreader

Вопрос:

Может BufferedReader.read(char[], int, int) ли вернуть 0 ? Если да, то в каких ситуациях?

Я знаю, что в противном случае он возвращает -1 at EOF и количество прочитанных символов.

Но есть ли вероятность, что я читаю 0 символы, а не на EOF ?

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

1. Я полагаю, если вы вызвали это с len равным 0, оно может вернуть 0. Но зачем вам это делать? В противном случае, нет, он никогда не вернет 0

Ответ №1:

Да, если третий параметр ( len ) равен 0, read немедленно возвращается и возвращает 0.

Во всех других обстоятельствах это невозможно *, потому read что метод (как Reader, так и InputStream) определяется следующим образом:

  • Не возвращайте 0, даже если (в настоящее время) нет возвращаемых байтов / символов — подождите (блокируйте), пока не будут доступны некоторые байты / символы.
  • Если никаких байтов / символов никогда не произойдет (это можно сделать только в том случае, если поток / считыватель закрыт), затем верните -1.

Таким образом, 0 невозможно. За исключением случаев, когда вы явно указываете, что вам не нужны байты, что является полным отказом (это также не проверяет «доступность», вы не можете этого сделать, если вы хотите знать, будут ли прочитаны байты, если вы вызовете read , вам придется их прочитать. Даже available() это не совсем так).

*) В конце Reader и InputStream являются интерфейсами и поэтому могут быть реализованы чем угодно, и любая реализация может решить вернуть 0, даже если len оно не равно нулю. Однако такая реализация нарушена, поскольку она не соответствует спецификации InputStream и Reader . Я не знаю ни о каких основных библиотеках (в пакете java.... ), которые являются такой сломанной реализацией.