我正在尝试了解 .Net MemoryStream 类的用法。由于流很忙,我需要使用存储一些临时动态长度二进制数据。所以我分配了一个内存流并暂时将数据写入其中。当我的流空闲时,我从内存流中读取所有数据并将数据写入其中。我通过将位置指针设置为 0 来做到这一点
即 mDataBuffer.Position=0;
然而,内存流类似乎不会在读取数据后丢弃数据。所以下次我得到和以前一样的数据。确认我写了这个示例程序
MemoryStream ms = new MemoryStream();
ms.WriteByte((byte)1);
ms.Position = 0;
Console.WriteLine(ms.ReadByte());
ms.WriteByte((byte)4);
ms.Position = 0;
Console.WriteLine(ms.ReadByte());
令我惊讶的是输出是 (1,1),尽管我期望输出是 (1,4)。
对于memorystream的这种行为,我真的是百思不得其解。任何人都可以阐明一下。此外,如果这是正常行为,那么我如何从流中删除过去的数据。
提前致谢, 外婆
最佳答案
你的代码可以翻译成这样: * 创建对象 * 在位置0写1 * 在位置0读取并输出(1) * 在第1位写4 * 在位置0读取并输出(1)
您可以通过在 ms.writebyte((byte)4) 行上方插入 ms.Position=0 来修复它。
关于c# - 从内存流中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497948/