code: @Nonnegative
    public long read (@Nonnull final ByteBuffer aDestByteBuffer)
    {
      ValueEnforcer.notNull (aDestByteBuffer, "DestByteBuffer");
  
      _checkClosed ();
      long nBytesRead = 0;
      while (m_nBufferIndex < m_aBuffers.length)
      {
        final ByteBuffer aByteBuffer = m_aBuffers[m_nBufferIndex];
        if (aByteBuffer.hasRemaining ())
          nBytesRead += ByteBufferHelper.transfer (aByteBuffer, aDestByteBuffer, false);
        if (!aDestByteBuffer.hasRemaining ())
          break;
        // Try next ByteBuffer
        ++m_nBufferIndex;
      }
      return nBytesRead;
    }
docs: Reads as much as possible into the destination buffer.
  
  @param aDestByteBuffer
  The destination byte buffer to use. May not be <code>null</code>.
  @return The number of bytes read. Always &ge; 0.