2015-04-21 2 views
1

Я использую следующий код: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.

Что я делаю неправильно?

+0

У меня нет компилятора 'C#', но это может быть потому, что вы не 'Flush'у ваших письменных данных на базовом устройстве. Попробуйте положить 'binaryWriter.Flush()' после написания на него. –

+0

Flush() не работает. Проблема была действительно с позицией. – Mugen

ответ

5

После того, как вы написали в поток, положение потока будет в пределах того, что вы написали ему.

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

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

приведет к оригинальной «Hello» записывается в поток будучи назначен msg.