用C#MemoryStream创建一个'ChaosStream'来读取随机长度的数据?

Dee*_*101 2 c# stream

测试评估显示MemoryStream总是返回"平滑"结果.即如果我们从MemoryStream400字节工作缓冲区中读取200个字节,它总是在一次调用中返回恰好200个字节.如果我们将4000字节读入200字节的工作缓冲区,那么它总是正好20次迭代,每次完全200字节.

问题是MemoryStreamcan(在现实世界中,角落情况)代表慢流源(如网络或文件).因此,读取可能不那么确定.每个Read操作可能会返回读取的非确定性字节(例如:8,1,105,20,5,80 ......)

那么,将一个香草MemoryStream转变为(因为缺少一个更好的词)是一个很好的方法,ChaosStream其中读取的字节数是1和读取请求之间的随机数count?(注意,0表示流结束).字节本身需要是底层字节,只需读取一些随机性/抖动即可扩展测试覆盖范围.

Ree*_*sey 5

您总是可以从中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)

  • 使用这种"随机"用法时,要注意一次创建多个`ChaosStream:它们可能共享种子.这对您来说可能是也可能不是问题. (2认同)