由於BinaryReader的底層緩衝策略,我不清楚是否可以讀取存儲在流中的偏移量,然後在此偏移量處重新定位流以恢復流。BinaryReader打開時使用Stream.Seek是否安全?
作爲一個例子,是下面的代碼確定:
using (var reader = new CustomBinaryReader(inputStream))
{
var offset= reader.ReadInt32();
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
//Then resume reading the streaming
}
或者我應該求流之前關閉第一二進制讀取,然後重新打開的第二閱讀器?
int offset;
using (var firstReader = new CustomBinaryReader(inputStream))
{
offset= firstReader.ReadInt32();
}
inputStream.Seek(offset, SeekOrigin.Begin);
using (var secondReader = new CustomBinaryReader(inputStream))
{
//Then resume reading the streaming
}
Hans,如果在Seek()調用之後調用ReadXxx()方法,您爲什麼會多次讀取偏移值? BinaryReader不會只是重新填充緩衝區並給你正確的值?當然,除非偏移的值等於寫入的偏移本身的位置,否則你會剛剛回到開始的位置。 – BKewl