11

为什么 FileStream.Length 是 long 类型,但 FileStream.Read 参数 - offset 的长度较短?

布莱恩

4

6 回答 6

6

参数告诉从offset哪里开始在数组中写入数据,array参数。它没有指出文件数据中的偏移量。

offset参数给出了数组(缓冲区索引)中开始读取的字节的偏移量, count参数给出了要从此流中读取的最大字节数。返回值是实际读取的字节数,如果到达流的末尾则为零。如果读取操作成功,则流的当前位置提前读取的字节数。如果发生异常,则流的当前位置不变。

来源:FileStream.Read

于 2012-11-27T07:28:28.010 回答
6

偏移量是放置数据的字节数组的索引。您不能分配大于 2 GB 的数组,因此偏移量不需要更大的数字。

于 2012-11-27T07:30:07.720 回答
1

我假设您指的是从基类覆盖的这个Stream方法。

偏移量是array参数中放置字节的位置,而不是从FileStream. array参数的类型不能byte[]超过int.MaxValue元素。

于 2012-11-27T07:29:21.877 回答
1

作为 mike z 答案的补充,为什么 byte[] 的索引不能超过 int.MaxValue - 类 Array 用object this[int index] { get; set; }方法实现 IList,因此索引只能是整数。

于 2012-11-27T07:31:48.607 回答
1

FileStream.Length 获取流的字节长度,FileStream.Read 从流中读取一个字节块。因此,从逻辑上讲,您将拥有比该字节块更多的单个字节。我假设出于这个原因 FileStream.Length 需要长类型。

于 2012-11-27T07:37:19.897 回答
0

FileStream 扩展 Stream,

Stream 可以处理多个 byte[int.MaxValue] 数组,并且它们一起具有很长的长度。

但是当你使用 Read 时,你可以用 int.MaxValue 将它的一部分读到一个字节数组中。

考虑一下,如果您想从磁盘读取大于 2G = int.MaxValue 的文件,则需要以 byte[int.MaxValue] 块的形式读取它

(:

于 2020-12-02T13:01:50.037 回答