code: @Override
    public int read (@Nonnull final byte [] b,
                     @Nonnegative final int nOfs,
                     @Nonnegative final int nLen) throws IOException
    {
      ValueEnforcer.isArrayOfsLen (b, nOfs, nLen);
      final int res = super.read (b, nOfs, nLen);
      if (res > 0)
      {
        m_nCount += res;
        _checkLimit ();
      }
      return res;
    }
docs: Reads up to <code>len</code> bytes of data from this input stream into an
  array of bytes. If <code>len</code> is not zero, the method blocks until
  some input is available; otherwise, no bytes are read and <code>0</code> is
  returned.
  <p>
  This method simply performs <code>in.read(b, off, len)</code> and returns
  the result.
  
  @param b
  the buffer into which the data is read.
  @param nOfs
  The start offset in the destination array <code>b</code>.
  @param nLen
  the maximum number of bytes 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 IndexOutOfBoundsException
  If <code>off</code> is negative, <code>len</code> is negative,
  or <code>len</code> is greater than <code>b.length - off</code>
  @exception IOException
  if an I/O error occurs.
  @see java.io.FilterInputStream