我有一个包含以下 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/