public final void readFully(byte[] b, int off, int len)
        throws IOException {
        int n = 0;
        do {
            int count = this.read(b, off + n, len - n);
            if (count < 0)
                throw new EOFException();
            n += count;
        } while (n < len);
    }
Reads exactly <code>len</code> bytes from this stream into the byte
array, starting at the current stream pointer. This method reads
repeatedly from the stream until the requested number of bytes are
read. This method blocks until the requested number of bytes are
read, the end of the stream is detected, or an exception is thrown.

@param      b     the buffer into which the data is read.
@param      off   the start offset of the data.
@param      len   the number of bytes to read.
@exception  EOFException  if this stream reaches the end before reading
              all the bytes.
@exception  IOException   if an I/O error occurs.
plugins/svg-plugin/batik-codec-fix/src/main/java/org/apache/batik/ext/awt/image/codec/util/SeekableStream.java