Что 0 (количество чтения байтов) возвращенный InputStream.read
средства? Как обработать эту ситуацию?
Обновление: Я имею в виду read(byte[] b)
или read(byte[] b, int off, int len)
методы, которые возвращают количество чтения байтов.
Единственная ситуация, в которой 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 явно заявляет, что:
Никогда не правильно использовать возвращаемое значение этого метода для выделения буфера, предназначенного для хранения всех данных в этом потоке.
Согласно документу Java API:
http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStream.html# read (byte [])
Это может произойти, только если переданный вами byte [] не содержит элементов (новый байт [0]).
В других ситуациях он должен возвращать хотя бы один байт. Или -1, если достигнут EOF. Или исключение.
Конечно: это зависит от фактической реализации InputStream, который вы используете !!! (это могло быть неправильным)