Вот ваш «стартер на 10» (не уверен, что это переводится глобально).
byte[] myBuffer = new byte[fixedSize];
int myBufferPos = fixedSize;
public int Read(byte[] buffer, int offset, int count)
{
int copiedCount = 0
while (copiedCount < count)
{
if (myBufferPos >= fixedSize)
{
//Read new fixed buffer into myBuffer
// use break on no more buffer.
myBufferPos = 0;
}
int bytesToCopy = fixedSize - myBufferPos;
if (bytesToCopy > count - copiedCount)
byteToCopy = count - copiedCount;
Array.Copy(myBuffer, myBufferPos, buffer, offset, byteToCopy);
offset += bytesToCopy;
myBufferPos += bytesToCopy;
copiedCount += bytesToCopy;
}
return copiedCount;
}
Не проверено, поэтому могут быть ошибки. Неясно, имеет ли ваш исходный поток длину, кратную его фиксированному размеру. Если нет, тогда для окончательного частичного буфера требуется дополнительная логика.
Основной принцип состоит в том, чтобы поддерживать свой собственный буфер фиксированного размера и отслеживать положение в этом буфере, которое до сих пор использовалось операциями чтения