c# - 了解流阅读器和内部缓冲区?

标签 c#

我有一个包含以下 3 行的 .txt 文件:

A50

B25

C25

这是我的代码:

FileStream fs = new FileStream(@"E:\1.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.AppendText(sr.ReadLine() + "\r\n");
textBox1.AppendText(fs.Position.ToString());

现在运行上面的代码后,输出将是:

A50

14

我的问题是为什么位置值是14?为什么它不是 4,因为流的指针将指向第一行 A50 末尾的 '\n' 字符?这与内部缓冲区有关吗?内部缓冲区的详细信息是什么以及它如何与 streamreader 一起工作?

抱歉英语不好。

最佳答案

StreamReader 将数据从磁盘读取到内部缓冲区,然后满足来自该缓冲区的请求。

它以这种方式工作,以减少必须调用操作系统获取数据的次数。如果它没有内部缓冲区,那么它必须这样做:

while (not end-of-file and character != newline)
{
    read next character and append to string
}

使用内部缓冲区,它将一大块数据(默认为 4K 字节,但可以更改)读取到内存中。然后它可以快速扫描该数据 block 以查找换行符并返回字符串。

关于c# - 了解流阅读器和内部缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528629/

相关文章:

c# - Nullable<int> 与 int? - 有什么不同吗?

c# - C# GraphSdk 的代理配置

c# - 角色在移动时振动 30fps

c# - 为什么在 C# 类库中使用扩展方法

c# - 禁用所需的 SSL 密码?

c# circular flatten arrays 收藏

c# - Convert.ToDecimal(double x) - System.OverflowException

c# - WCF 消息安全相关问题

c# - 如何将调试文本从 C# 类发送到 ASP.NET 页面

c# - C# 中是否有一个内置类型,其中包含一个 bool 和一个用于静态方法返回的字符串?