EndOfStreamException с простыми BinaryWriter и BinaryReader

Я использую следующий код:

var fileStream = new MemoryStream();
var binaryWriter = new BinaryWriter(fileStream);
var binaryReader = new BinaryReader(fileStream);

binaryWriter.Write("Hello");
var msg = binaryReader.ReadString();

Однако я получаю следующее исключение:

System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

Перед чтением binaryReader.BaseStream.Length больше 0, однако binaryReader.PeekChar() возвращает -1.

Что я делаю не так?


person Mugen    schedule 21.04.2015    source источник
comment
У меня нет C# компилятора под рукой, но это может быть потому, что вы не Flush записываете свои записанные данные на базовое устройство. Попробуйте поставить binaryWriter.Flush() после записи на него.   -  person Adam Kewley    schedule 21.04.2015
comment
Flush() не работает. Проблема была действительно с позицией.   -  person Mugen    schedule 21.04.2015


Ответы (1)


После того, как вы записали в поток, позиция потока будет равна длине того, что вы в него написали.

Чтобы читать из него сразу после записи в него, необходимо сбросить позицию потока:

binaryWriter.Write("Hello");
binaryWriter.BaseStream.Position = 0;
var msg = binaryReader.ReadString();

В результате исходное "Hello", записанное в поток, будет назначено msg.

person aevitas    schedule 21.04.2015