What 0 returned by InputStream.read(byte[]) means? How to handle this?

inputstream, io, java

Solution

The only situation in which a `InputStream` may return `0` from a call to `read(byte[])` is when the `byte[]` passed in has a length of 0:

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

As specified by this part of the JavaDoc:

If the length of b is zero, then no bytes are read and 0 is returned

My guess: you used `available()` to see how big the buffer should be and it returned `0`. Note that this is a misuse of `available()`. The JavaDoc explicitly states that:

It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.

Problem

What 0 (number of bytes read) returned by `InputStream.read(byte[])` and `InputStream.read(byte[], int, int)` means? How to handle this situation? To be clear, I mean `read(byte[] b)` or `read(byte[] b, int off, int len)` methods which return number of bytes read.

Original source