【问题标题】:How to fill a MemoryStream with 0xFF bytes?如何用 0xFF 字节填充 MemoryStream?
【发布时间】:2012-05-21 03:48:52
【问题描述】:

我有一个MemoryStream,它是在运行时从文件创建的。

然后MemoryStream被编辑并删除了一些字节。

现在我必须维护一个常量文件大小,所以我必须用 0xFF 字节填充 MemoryStream..

执行此操作的最快方法是什么?

我知道,我总是可以遍历 MemoryStream 大小并添加 0xFF,但我需要知道一种更快、更有效的方法!

【问题讨论】:

  • 如果你想要性能,那么我会使用字节数组而不是内存流
  • AFAIK, MemoryStream = ByteArray..的流操作..所以性能并没有太大的阻碍
  • 你必须在内存中保持一个恒定的文件大小吗?还是仅当您将 MemoryStream 写回磁盘时文件大小才重要?
  • @Hans 是的,我必须在内存中保持一个恒定的大小......我不会在添加 0xFF 之后写入文件,因为它还有一些工作要做......
  • 这是一个微优化。追求它很有趣,因此您将了解到,当读取文件花费数百毫秒时,节省几微秒是没有意义的。无论你多么努力,你都无法分辨出其中的区别。

标签: c# padding memorystream


【解决方案1】:

如果您有许多字节要写入流,则写入数组而不是单独写入每个字节可能更有效:

static void Fill(this Stream stream, byte value, int count)
{
    var buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = value;
    }
    while (count > buffer.Length)
    {
        stream.Write(buffer, 0, buffer.Length);
        count -= buffer.Length;
    }
    stream.Write(buffer, 0, count);
}

【讨论】:

  • 在第 10 行“stream.Write(buffer, 0, buffer.Length);”,为什么偏移量为 0?字节应添加到流的末尾!
  • 请看Stream.Write Method的文档。
  • 哦!不知道偏移量在缓冲区中![我之前从未使用过只写方法!]
猜你喜欢
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2014-08-13
  • 2018-01-14
  • 1970-01-01
  • 2019-07-18
  • 2013-01-04
相关资源
最近更新 更多