Search code examples
javaioinputstream

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


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.


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.