7
我想在单台PC上模拟网络类型的数据流。具有独立写入位置和读取位置的数据流
我已经通过创建一个Stream
是发生在2个基本流,一个读取和另一个写入做到了这一点。
然后我创建这个类的2个实例交换2个流。目前我使用MemoryStream
作为2个基础流。
我现在遇到的麻烦是,如果我写X字节到MemoryStream
那么它的位置将是X,如果我然后做一个Read
我得不到数据,因为我在流的末尾。
鉴于我通常会做一对夫妇的读/写(所以不能简单的复位的现在的位置为0,每次写入后)我可以用什么Stream
得到这个行为?
实际上,我想要一种字节队列,我可以写入并以流的形式读取。
即(忽略实际的方法参数)
MyStream.Write({ 1, 2, 3, 4, 5, 6 });
MyStream.Write({ 7, 8 });
MyStream.Read(3) // Returns { 1, 2, 3 }
MyStream.Read(4) // Returns { 4, 5, 6, 7 }
唯一的问题是这样的代码不是线程安全的。如果你在多线程中使用这段代码,你需要确保没有任何尝试同时调用读写操作。在读取和写入方法之上,您可以添加[MethodImpl(MethodImplOptions.Synchronized)]为(线程)安全。 – Qubei 2017-01-25 04:53:41