Aufgrund der unter der Haube-Pufferungsstrategie von BinaryReader ist es mir unklar, ob es in Ordnung ist oder nicht, einen in einem Stream gespeicherten Offset zu lesen, dann den Stream an diesem Offset neu positionieren, um das Streaming fortzusetzen.Ist es sicher, Stream.Seek zu verwenden, wenn ein BinaryReader geöffnet ist?
Als Beispiel ist der folgende Code ok:
using (var reader = new CustomBinaryReader(inputStream))
{
var offset= reader.ReadInt32();
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
//Then resume reading the streaming
}
Oder sollte ich das erste binäre Leser schließen, bevor der Strom Sucht und dann einen zweiten Leser wieder öffnen?
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, warum würden Sie den Offset-Wert mehr als einmal lesen, wenn Sie nach dem Seek() - Aufruf eine ReadXxx() -Methode aufrufen? Wird der BinaryReader den Puffer nicht einfach auffüllen und Ihnen die richtigen Werte geben? Es sei denn natürlich, der Offset hat einen Wert, der dem Ort des geschriebenen Offset selbst entspricht - dann landen Sie genau dort, wo Sie angefangen haben. – BKewl