public override int Read(byte[] buffer, int offset, int count)
{
var off = CurrentPosition & BlockAnd;
var min = BlockSize - off;
if (count < min)
min = count;
if (TotalSize - CurrentPosition < min)
min = TotalSize - CurrentPosition;
if (min > 0)
{
var pos = CurrentPosition >> BlockShift;
Buffer.BlockCopy(Blocks[pos], off, buffer, offset, min);
CurrentPosition += min;
}
return min;
}