繁体   English   中英

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

[英]Why FileStream.Length is long type, but FileStream.Read argument - offset has a shorter length?

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

布莱恩

offset参数告诉从何处开始在数组中写入数据,即array参数。 它不会指出文件数据中的偏移量。

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

来源: FileStream.Read

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

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

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

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

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

FileStream 扩展 Stream,

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

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

想一想,如果你想从磁盘读取一个大于 2G = int.MaxValue 的文件,你需要以字节 [int.MaxValue] 的块读取它

(:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM