public override int Read(byte[] buffer, int offset, int count)
{
int bytesRead = 0;
while (count > 0)
{
// check for end of stream.
if (m_currentBuffer.Array == null)
{
return bytesRead;
}
int bytesLeft = GetBufferCount(m_bufferIndex) - m_currentPosition;
// copy the bytes requested.
if (bytesLeft > count)
{
Array.Copy(m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, buffer, offset, count);
bytesRead += count;
m_currentPosition += count;
return bytesRead;
}
// copy the bytes available and move to next buffer.
Array.Copy(m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, buffer, offset, bytesLeft);
bytesRead += bytesLeft;
offset += bytesLeft;
count -= bytesLeft;
// move to next buffer.
SetCurrentBuffer(m_bufferIndex+1);
}
return bytesRead;
}