Reads up to <code>len</code> bytes of data from the input stream into
an array of bytes. An attempt is made to read as many as
<code>len</code> bytes, but a smaller number may be read.
The number of bytes actually read is returned as an integer.
<p> This method blocks until input data is available, end of file is
detected, or an exception is thrown.
<p> If <code>len</code> is zero, then no bytes are read and
<code>0</code> is returned; otherwise, there is an attempt to read at
least one byte. If no byte is available because the stream is at end of
file, the value <code>-1</code> is returned; otherwise, at least one
byte is read and stored into <code>b</code>.
<p> The first byte read is stored into element <code>boff</code>, the
next one into <code>b[off+1]</code>, and so on. The number of bytes read
is, at most, equal to <code>len</code>. Let <i>k</i> be the number of
bytes actually read; these bytes will be stored in elements
<code>boff</code> through <code>b[off+</code><i>k</i><code>-1]</code>,
leaving elements <code>b[off+</code><i>k</i><code>]</code> through
<code>b[off+len-1]</code> unaffected.
<p> In every case, elements <code>b[0]</code> through
<code>boff</code> and elements <code>b[off+len]</code> through
<code>b[b.length-1]</code> are unaffected.
<p> The <code>read(b,</code> <code>off,</code> <code>len)</code> method
for class <code>InputStream</code> simply calls the method
<code>read()</code> repeatedly. If the first such call results in an
<code>IOException</code>, that exception is returned from the call to
the <code>read(b,</code> <code>off,</code> <code>len)</code> method. If
any subsequent call to <code>read()</code> results in a
<code>IOException</code>, the exception is caught and treated as if it
were end of file; the bytes read up to that point are stored into
<code>b</code> and the number of bytes read before the exception
occurred is returned. The default implementation of this method blocks
until the requested amount of input data <code>len</code> has been read,
end of file is detected, or an exception is thrown. Subclasses are encouraged
to provide a more efficient implementation of this method.
@param b the buffer into which the data is read.
@param off the start offset in array <code>b</code>
at which the data is written.
@param len the maximum number of bytes to read.
@return the total number of bytes read into the buffer, or
<code>-1</code> if there is no more data because the end of
the stream has been reached.
@exception IOException If the first byte cannot be read for any reason
other than end of file, or if the input stream has been closed, or if
some other I/O error occurs.
@exception NullPointerException If <code>b</code> is <code>null</code>.
@exception IndexOutOfBoundsException If <code>off</code> is negative,
<code>len</code> is negative, or <code>len</code> is greater than
<code>b.length - off</code>
@see java.io.InputStream#read()
Reads up to <code>len</code> bytes of data from the input stream into an array of bytes. An attempt is made to read as many as <code>len</code> bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.
<p> This method blocks until input data is available, end of file is detected, or an exception is thrown.
<p> If <code>len</code> is zero, then no bytes are read and <code>0</code> is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at end of file, the value <code>-1</code> is returned; otherwise, at least one byte is read and stored into <code>b</code>.
<p> The first byte read is stored into element <code>boff</code>, the next one into <code>b[off+1]</code>, and so on. The number of bytes read is, at most, equal to <code>len</code>. Let <i>k</i> be the number of bytes actually read; these bytes will be stored in elements <code>boff</code> through <code>b[off+</code><i>k</i><code>-1]</code>, leaving elements <code>b[off+</code><i>k</i><code>]</code> through <code>b[off+len-1]</code> unaffected.
<p> In every case, elements <code>b[0]</code> through <code>boff</code> and elements <code>b[off+len]</code> through <code>b[b.length-1]</code> are unaffected.
<p> The <code>read(b,</code> <code>off,</code> <code>len)</code> method for class <code>InputStream</code> simply calls the method <code>read()</code> repeatedly. If the first such call results in an <code>IOException</code>, that exception is returned from the call to the <code>read(b,</code> <code>off,</code> <code>len)</code> method. If any subsequent call to <code>read()</code> results in a <code>IOException</code>, the exception is caught and treated as if it were end of file; the bytes read up to that point are stored into <code>b</code> and the number of bytes read before the exception occurred is returned. The default implementation of this method blocks until the requested amount of input data <code>len</code> has been read, end of file is detected, or an exception is thrown. Subclasses are encouraged to provide a more efficient implementation of this method.
@param b the buffer into which the data is read. @param off the start offset in array <code>b</code> at which the data is written. @param len the maximum number of bytes to read. @return the total number of bytes read into the buffer, or <code>-1</code> if there is no more data because the end of the stream has been reached. @exception IOException If the first byte cannot be read for any reason other than end of file, or if the input stream has been closed, or if some other I/O error occurs. @exception NullPointerException If <code>b</code> is <code>null</code>. @exception IndexOutOfBoundsException If <code>off</code> is negative, <code>len</code> is negative, or <code>len</code> is greater than <code>b.length - off</code> @see java.io.InputStream#read()