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

时间:2012-11-27 07:17:58

标签: c#

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

布赖恩

6 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

offset参数告诉您在数组中开始写入数据array参数的位置。它没有指出文件数据中的偏移量。

  

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

来源:FileStream.Read

答案 2 :(得分:1)

我假设您指的是从基类Stream重写的this方法。

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

答案 3 :(得分:1)

除了mike z回答之外,为什么byte []的索引不能超过int.MaxValue - class Array用object this[int index] { get; set; }方法实现IList,所以索引只能是整数。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

FileStream扩展Stream,

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

但是当您使用Read时,您只能将其一部分读取到具有int.MaxValue的字节数组中。

考虑一下,如果要从磁盘读取大于2G = int.MaxValue的文件, 您将需要以字节[int.MaxValue]

的形式读取它

(: