C# FileStream,从大文件中读取数据块。文件大小大于int。如何设置偏移量?
FileStream.Read()定义为:C# FileStream,从大文件中读取数据块。文件大小大于int。如何设置偏移量?,c#,file,stream,filestream,C#,File,Stream,Filestream,FileStream.Read()定义为: public override int Read( byte[] array, int offset, int count ) 如何从大于int.MaxValue的偏移量读取一些字节 假设我有一个非常大的文件,我想从位置3147483648开始读取100MB 我该怎么做呢?偏移量这里是开始写入的数组中的偏移量。在您的情况下,只需设置: stream.Position = 3147483648; 然后使用Read()。当您知道
public override int Read(
byte[] array,
int offset,
int count
)
如何从大于int.MaxValue的偏移量读取一些字节
假设我有一个非常大的文件,我想从位置3147483648开始读取100MB
我该怎么做呢?偏移量
这里是开始写入的数组中的偏移量。在您的情况下,只需设置:
stream.Position = 3147483648;
然后使用Read()
。当您知道需要读取[n]个字节时,偏移量
最常用:
int toRead = 20, bytesRead;
while(toRead > 0 && (bytesRead = stream.Read(buffer, offset, toRead)) > 0)
{
toRead -= bytesRead;
offset += bytesRead;
}
if(toRead > 0) throw new EndOfStreamException();
这将准确地将20个字节读入缓冲区
(或引发异常)。请注意,Read()
不能保证一次性读取所有必需的数据,因此通常需要一个递增偏移量的循环。根据offset
参数,是字节[]数组中的偏移量:
排列
类型:System.Byte[]
此方法返回时,包含指定的字节数组
偏移量和(偏移量+计数-1)之间的值替换为
从当前源读取的字节数
抵消
类型:System.Int32
数组中用于放置读取字节的字节偏移量
计数
类型:System.Int32
要读取的最大字节数
Read()
只是从当前位置读取,而当前位置恰好是长的
,应该在调用Read()
之前进行设置,请参见但是当偏移量超过int.MaxValue时会发生什么?您将如何处理此问题?@tayl0rs由于此时将超过缓冲区的最大数组大小,因此这是一个没有意义的问题。即使启用了非常大的阵列支持,您也无法在任何维度上超过它;请参阅此处的“备注”:(请记住:偏移量与数组相关,而不是与流相关)