FileStream.Read()定義爲:FileStream,從大文件讀取數據塊。文件大小比int大。如何設置偏移量?
public override int Read(
byte[] array,
int offset,
int count
)
我怎麼能讀的一些字節,比int.MaxValue抵消更大?
比方說,我有一個非常大的文件,我想讀100MB從3147483648.位置
我如何能做到這一點出發?
FileStream.Read()定義爲:FileStream,從大文件讀取數據塊。文件大小比int大。如何設置偏移量?
public override int Read(
byte[] array,
int offset,
int count
)
我怎麼能讀的一些字節,比int.MaxValue抵消更大?
比方說,我有一個非常大的文件,我想讀100MB從3147483648.位置
我如何能做到這一點出發?
offset
這裏是數組中的偏移量開始寫入。在你的情況下,只需設置:
stream.Position = 3147483648;
然後用Read()
。該offset
當你知道你需要閱讀是最常用[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個字節爲buffer
(或拋出異常)。請注意,Read()
不能保證一次讀取所有需要的數據,因此通常需要循環遞增偏移量。
根據http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx的offset
參數是offset inside the byte[] array
:
陣列 類型:System.Byte [] 此方法返回時,包含具有 指定字節數組之間的偏移值及(偏移+ count - 1)替換爲從當前源讀取的 字節。
偏移量 類型:System.Int32 數組中讀取字節將被放置的字節偏移量。
count 類型:System.Int32 要讀取的最大字節數。
Read()
剛從這恰好是一個long
,應該調用Read()
看到http://msdn.microsoft.com/en-us/library/system.io.filestream.position.aspx
但什麼時候會發生偏移必須高於int.MaxValue之前可以設置的電流現在的位置讀取?你將如何處理? – tayl0rs
@ tayl0rs,因爲緩衝區的最大數組大小在該點將被超過,這是一個有待考慮的問題。即使啓用了超大型陣列支持,您也無法在任何維度上超過該支持;請參閱此處的「備註」:https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx(並記住:偏移量與數組相關,而不是流) –