1

我正在尝试了解 .Net MemoryStream 类的用法。由于流忙,我需要使用存储一些临时动态长度的二进制数据。所以我分配了一个内存流并临时将数据写入它。当我的流空闲时,我从内存流中读取所有数据并将数据写入其中。我通过将位置指针设置为 0 来做到这一点

即mDataBuffer.Position=0;

但是,似乎 memorystream 类在读取后不会丢弃数据。所以下次我得到与以前相同的数据。为了确认我写了这个示例程序

        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 的这种行为感到非常困惑。任何人都可以阐明一些观点。此外,如果这是正常行为,那么我如何从流中删除过去的数据。

在此先感谢, vaibhav

4

1 回答 1

4

您的代码可以翻译成这样: * 创建对象 * 在位置 0 写入 1 * 在位置 0 读取并输出 (1) * 在位置 1 写入 4 * 在位置 0 读取并输出 (1)

您可以通过在 ms.writebyte((byte)4) 行上方插入 ms.Position=0 来修复它。

于 2009-09-30T13:14:11.450 回答