Проблема в том, что вы используете PeekChar
- он пытается декодировать двоичные данные, как если бы это был символ UTF-8. К сожалению, в BinaryReader
я не вижу ничего, что позволяло бы определить конец потока.
Вы могли бы просто продолжать звонить ReadInt64
, пока не наберется EndOfStreamException
, но это довольно ужасно. Хм. Вы можете вызвать ReadBytes(8)
, а затем BitConverter.ToInt64
- это позволит вам остановиться, когда ReadBytes
возвращает байтовый массив с чем-то меньшим, чем 8 байтов ... хотя это не здорово.
Кстати, вам не нужно явно вызывать Close
, поскольку вы уже используете оператор using
. (Это касается и читателя, и писателя.)