gpt4 book ai didi

c# - 如果我们稍后在读取时设置它,为什么要在 FileStream ctor 中设置 bufferSize?

转载 作者:行者123 更新时间:2023-12-04 01:46:36 24 4
gpt4 key购买 nike

FileStream Constructor 的文档没有提到原因。它只是说:

bufferSize

Type: System.Int32

A positive Int32 value greater than 0 indicating the buffer size. The default buffer size is 4096.


但是稍后我们使用诸如 Read 之类的方法,在其中我们指定缓冲区大小并提供缓冲区本身。
那么为什么要在构造函数中指定缓冲区大小呢?

最佳答案

这些是不同的缓冲区。一个是 FileStream 本身的内部缓冲区(传递给构造函数的大小),另一个是调用者的缓冲区(来自 Read 的缓冲区)。他们没有关系。

假设您将 4000 作为内部缓冲区大小传递给构造函数,然后调用:

Read(buffer, 0, 100);

会发生什么(简单来说,并假设首先从这个流中读取)是 FileStream 将从文件中读取 4000 个字节并将其存储在它的内部缓冲区中。然后它将向调用者的缓冲区写入 100 个字节。

如果你这样做
Read(buffer, 0, 8000)

它将从文件中读取 4000 到内部缓冲区,将 4000 写入调用者的缓冲区,然后再次从文件中读取下 4000 到内部缓冲区,然后完成写入调用者的缓冲区。

为什么有那个内部缓冲区?因为每次小的读取都要打扰文件系统是很昂贵的。假设您逐字节读取 FileStream 4000 次。它只会打扰文件系统一次,其余的 3999 将从内部缓冲区返回。

关于c# - 如果我们稍后在读取时设置它,为什么要在 FileStream ctor 中设置 bufferSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com