public override int Read(byte[] buffer, int offset, int count)
{
if (Position >= Length)
{
return 0;
}
var PageOffset = (int)(Position % BytesPerPage);
var ToRead = (BytesPerPage - PageOffset);
if (count > ToRead)
{
int Read1 = Read(buffer, offset, ToRead);
int Read2 = Read(buffer, offset + ToRead, count - ToRead);
return Read1 + Read2;
}
var PageIndex = (int)(Position / BytesPerPage);
if (PageIndex != LastPageIndex)
{
LastPageIndex = PageIndex;
LastPageData = ReadPage(PageIndex);
}
byte[] PageData = LastPageData;
Array.Copy(PageData, PageOffset, buffer, offset, count);
Position += count;
return count;
}