c# - 从内存流中删除数据

标签 c# memorystream

我正在尝试了解 .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/

相关文章:

c# - 将泛型对象转换为强类型 T

c# - 在 Roslyn 中自动加载 .csx

C# 3.0 使用 MemoryStream 将 itextsharp pdf 保存到数据库

C# MemoryStream & GZipInputStream : Can't . 读取超过 256 个字节

c# - 来自具有不同类型数据的字节数组的 MemoryStream

node.js - Node js,将pdfkit管道传输到内存流

c# - WPF : How to bind Button's visibility inside ListBox ItemsControl using selecteditem information ?

c# - 如何从 View 中获取在文本框中输入的值

c# - 如何从javascript返回一个数组? (执行脚本)

c# - 未找到适合完成此操作的成像组件