
关于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” 展开
{
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” 展开
1个回答
展开全部
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()
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()
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询