【问题标题】:FileStream and it's buffering strategyFileStream 及其缓冲策略
【发布时间】:2015-11-22 20:29:04
【问题描述】:

我发现将 BufferedStream 与 FileStream 结合使用是没有意义的,因为它有自己的缓冲策略。然而,我想知道一件事:

FileStream fsWithBuffer = new FileStream("buf.dat", FileMode.OpenOrCreate,
                FileAccess.ReadWrite, FileShare.None, 255);
            fsWithBuffer.WriteByte((byte)4);
            fsWithBuffer.Dispose();

此代码将一部分字节写入指定文件。在此之前,这个字节保存在内部缓冲区中,所以我知道如果我不调用 Dispose() 方法,则不会将任何内容写入文件。

现在,我的问题是:有时我们不想将所有数据放在 FileStream 的缓冲区中,假设它仅用于小写入。是否有可能将一些数据直接放入与 FileStream 关​​联的文件中(而不是将其更早放入内部缓冲区)?

谢谢!

【问题讨论】:

  • 您是在问是否可以在没有缓冲区的情况下使用FileStream?我看不出重点,你还是要处理 FileStream 类。
  • 你总是可以打电话给Flush,虽然你不会以这种方式绕过缓冲区(而且我看不出没有这样做的意义)。
  • 好的,我明白了。谢谢 :) 无论如何,我想 Flush 是我在这种情况下所寻找的。​​span>

标签: c# io filestream bufferstrategy bufferedstream


【解决方案1】:

总结这个问题,由于没有官方答案,我在这里寻找的是Flush()方法。它将实际缓冲区保存到与 FileStream 关​​联的文件中,这是我需要的:)

【讨论】:

    【解决方案2】:

    有一个标志枚举FileOptions.WriteThrough 值可以传递给FileStream 构造函数。它指示文件流直接写入底层数据存储,无需任何缓冲。

    【讨论】:

    • 这是一个不错的选择,但现在好像缓冲区完全没有必要了,对吧?我的意思是,因为现在它根本不会被使用。
    • 是的,应用此枚举值后,没有缓冲区。
    • 那么使用它有什么意义呢?我的意思是我可以创建 FileStream 既没有缓冲区也没有提到的 FileOption。
    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多