我继承了 Stream 类,我不知道如何正确实现 Read() 函数,所以我不会得到很多嵌套的 ifs 和难以调试的代码。关键是从该流的源读取返回大小不变的缓冲区(例如,不可更改),但 Read() 函数接受不同的缓冲区大小。我虽然考虑添加 BufferedStream,但我认为这是个坏主意。感谢您的帮助!
最佳答案
内部源返回固定大小的缓冲区?如果是那样的话,这并不是 BufferedStream
所做的——它只是减少了对物理流的调用次数。您需要一个单独的机制来缓存 - 您填充和清空的 MemoryStream 将是一个合理的选择。例如(完全未经测试):
MemoryStream localBuffer = new MemoryStream();
bool ReadNextChunk()
{
// clear
localBuffer.Position = 0;
localBuffer.SetLength(0);
// get data
byte[] chunk = null; // TODO - read from source
if(chunk == null || chunk.Length == 0) return false; // EOF
localBuffer.Write(chunk, 0, chunk.Length);
localBuffer.Position = 0;
return true;
}
public override int Read(byte[] buffer, int offset, int count)
{
int bytes;
if ((bytes = localBuffer.Read(buffer, offset, count)) > 0) return bytes;
if (!ReadNextChunk()) return 0;
return localBuffer.Read(buffer, offset, count);
}
关于c# - 继承流;在 Read() 中缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579593/