Z powodu strategii buforowania pod maską BinaryReadera, nie jest dla mnie jasne, czy jest w porządku, czy nie czytać offsetu zapisanego w strumieniu, a następnie zmienić położenie strumienia w tym przesunięciu, aby wznowić przesyłanie strumieniowe.Czy można bezpiecznie używać Stream.Seek, gdy BinaryReader jest otwarty?
Jako przykład jest kod dodaje ok:
using (var reader = new CustomBinaryReader(inputStream))
{
var offset= reader.ReadInt32();
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
//Then resume reading the streaming
}
Albo powinienem zamknąć pierwszy czytnik binarnego przed Poszukiwany strumienia, a następnie ponowne otwarcie drugiego czytnika?
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, dlaczego odczytałeś wartość offsetu więcej niż raz, jeśli wywołasz metodę ReadXxx() po wywołaniu Seek()? Czy BinaryReader po prostu nie napełni bufora i nie poda poprawnych wartości? O ile, oczywiście, przesunięcie nie ma wartości równej położeniu samego zapisanego przesunięcia - wtedy skończysz z miejsca, z którego zacząłeś. – BKewl