Что 0 возвращенных InputStream.read () средства? Как обработать это?

Что 0 (количество чтения байтов) возвращенный InputStream.read средства? Как обработать эту ситуацию?

Обновление: Я имею в виду read(byte[] b) или read(byte[] b, int off, int len) методы, которые возвращают количество чтения байтов.

13
задан Joachim Sauer 23 February 2010 в 16:24
поделиться

2 ответа

Единственная ситуация, в которой InputStream может вернуть 0 из вызова чтения (byte []) , - это когда byte [] имеет длину 0:

 byte[] buf = new byte[0];
 int read = in.read(buf); // read will contain 0

Как указано в этой части JavaDoc:

Если длина b равна нулю, то байты не читаются и возвращается 0

Мое предположение: вы использовал available () , чтобы увидеть, насколько большим должен быть буфер, и вернул 0 . Обратите внимание, что это неправильное использование available () . JavaDoc явно заявляет, что:

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

17
ответ дан 1 December 2019 в 20:29
поделиться

Согласно документу Java API:

http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStream.html# read (byte [])

Это может произойти, только если переданный вами byte [] не содержит элементов (новый байт [0]).

В других ситуациях он должен возвращать хотя бы один байт. Или -1, если достигнут EOF. Или исключение.

Конечно: это зависит от фактической реализации InputStream, который вы используете !!! (это могло быть неправильным)

3
ответ дан 1 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

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