public void ReadBytes(byte[] destination, int destinationOffset, int count)
{
ThrowIfDisposed();
EnsureDataAvailable(count);
var chunkIndex = (_sliceOffset + _position) / _chunkSize;
var chunkOffset = (_sliceOffset + _position) % _chunkSize;
while (count > 0)
{
var chunkRemaining = _chunkSize - chunkOffset;
var bytesToCopy = (count < chunkRemaining) ? count : chunkRemaining;
Buffer.BlockCopy(_chunks[chunkIndex].Bytes, chunkOffset, destination, destinationOffset, bytesToCopy);
chunkIndex += 1;
chunkOffset = 0;
count -= bytesToCopy;
destinationOffset += bytesToCopy;
_position += bytesToCopy;
}
}