测试评估显示MemoryStream总是返回"平滑"结果.即如果我们从MemoryStream400字节工作缓冲区中读取200个字节,它总是在一次调用中返回恰好200个字节.如果我们将4000字节读入200字节的工作缓冲区,那么它总是正好20次迭代,每次完全200字节.
问题是MemoryStreamcan(在现实世界中,角落情况)代表慢流源(如网络或文件).因此,读取可能不那么确定.每个Read操作可能会返回读取的非确定性字节数(例如:8,1,105,20,5,80 ......)
那么,将一个香草MemoryStream转变为(因为缺少一个更好的词)是一个很好的方法,ChaosStream其中读取的字节数是1和读取请求之间的随机数count?(注意,0表示流结束).字节本身需要是底层字节,只需读取一些随机性/抖动即可扩展测试覆盖范围.
您总是可以从中MemoryStream提供一些随机性:
public class ChaosStream : MemoryStream
{
private Random random = new Random();
// Create constructors as needed to match desired MemoryStream construction
public override int Read(byte[] buffer, int offset, int count)
{
int newCount = random.Next(1, count + 1);
return base.Read(buffer, offset, newCount);
}
}
Run Code Online (Sandbox Code Playgroud)