@SuppressWarnings("NullableProblems")
    @Override
    public int read(final byte[] b) throws IOException {
        return read(b, 0, b.length);
    }
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>
<p>
This method blocks until input data is available, end of file is
detected, or an exception is thrown.
<p>
<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>
<p>
The first byte read is stored into element <code>b[off]</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>b[off]</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>
<p>
In every case, elements <code>b[0]</code> through <code>b[off]</code> and
elements <code>b[off+len]</code> through <code>b[b.length-1]</code> are
unaffected.
<p>
<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.
@throws 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.
@see java.io.InputStream#read()
stroom-data/stroom-data-store-impl-fs/src/main/java/stroom/data/store/impl/fs/RASegmentInputStream.java