关于C#中FileStream.Read()的问题。。如下代码。。

using(FileStreamfs=newFileStream(@"C:\Users\qiongrong\Desktop\helloworld.txt",FileMod... using (FileStream fs = new FileStream(@"C:\Users\qiongrong\Desktop\helloworld.txt", FileMode.Open, FileAccess.Read))
{
byte[] bt = new byte[1024];
int realLength = fs.Read(bt, 0, bt.Length);

while (realLength > 0)
{
string str = Encoding.UTF8.GetString(bt, 0, realLength);
Console.WriteLine(str);
realLength = fs.Read(bt, 0, bt.Length);
}
}

1:为什么图中while循环中 fs.Read(bt, 0, bt.Length) 的返回值是 0?
2:这个FileStream.Read()的这个方法的内部执行原理是什么?

PS:我的 helloworld.txt 这个文本文件中的写的是“123456”
展开
 我来答
然后去远足
推荐于2018-05-10 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2567万
展开全部
1、FileStream 继承自 Stream。

Stream 表示“流”(这个概念在计算机中非常常见,题主可以自行搜索相关资料),本质上是一种字节序列。说穿了,计算机只认识0和1,那么这么丰富多彩的文本、音乐、视频,归根结底都是转换成字节存储在内存与硬盘中的。

Stream 对象有一个属性 Length,表示这个流的长度;还有一个属性 Position,表示这个流当前的位置。

Stream.Read(byte[] array, int offset, int count);

array 表示缓冲区;offset 表示从流的当前位置(也就上面说的 Position)偏移多少个字节开始读;count 表示读取多少个字节。该方法返回的是实际上读取了多少个字节(永远小于等于 count),如果该值等于 0,说明已经到流的末尾了。读取之后,这个流的 Position 就会发生变化。

为什么要缓冲区?因为一个流很可能非常大,一次性的加载是不现实的,所以需要分块来读取,存储每个分块的这个字节数组就叫做“缓冲区”。

2、底层调用的是 kernel32.dll 中的 Windows API 方法 ReadFile()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式