为什么FileStream.Length是long类型,但FileStream.Read参数 - offset的长度为int而不是?
布赖恩
答案 0 :(得分:6)
偏移量是放置数据的字节数组的索引。您不能分配大于2 GB的数组,因此不需要更大的偏移数。
答案 1 :(得分:5)
offset
参数告诉您在数组中开始写入数据array
参数的位置。它没有指出文件数据中的偏移量。
offset 参数给出了开始读取的 array (缓冲区索引)中的字节偏移量,以及 count 参数给出从此流中读取的最大字节数。返回的值是读取的实际字节数,如果到达流的末尾则返回零。如果读取操作成功,则将当前位置的流提前读取的字节数。如果发生异常,则流的当前位置不变。
答案 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]
的形式读取它(: