code: public void unread (@Nonnull final byte [] aBuf,
                        @Nonnegative final int nOfs,
                        @Nonnegative final int nLen) throws IOException
    {
      ValueEnforcer.isArrayOfsLen (aBuf, nOfs, nLen);
      _ensureOpen ();
  
      if (nLen > m_nBufPos)
        throw new IOException ("Push back buffer is full");
      m_nBufPos -= nLen;
      System.arraycopy (aBuf, nOfs, m_aBuf, m_nBufPos, nLen);
    }
docs: Pushes back a portion of an array of bytes by copying it to the front of
  the pushback buffer. After this method returns, the next byte to be read
  will have the value <code>b[off]</code>, the byte after that will have the
  value <code>b[off+1]</code>, and so forth.
  
  @param aBuf
  the byte array to push back.
  @param nOfs
  the start offset of the data.
  @param nLen
  the number of bytes to push back.
  @exception IOException
  If there is not enough room in the pushback buffer for the
  specified number of bytes, or this input stream has been closed
  by invoking its {@link #close()} method.
  @since JDK1.1