2011-08-18 42 views

回答

11

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()不能保證一次讀取所有需要的數據,因此通常需要循環遞增偏移量。

+0

但什麼時候會發生偏移必須高於int.MaxValue之前可以設置的電流現在的位置讀取?你將如何處理? – tayl0rs

+1

@ tayl0rs,因爲緩衝區的最大數組大小在該點將被超過,這是一個有待考慮的問題。即使啓用了超大型陣列支持,您也無法在任何維度上超過該支持;請參閱此處的「備註」:https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx(並記住:偏移量與數組相關,而不是流) –

1

根據http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspxoffset參數是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

相關問題