Сколько бит читает BinaryReader.PeekChar()?

Я работаю над улучшением класса читателя потока, который использует BinaryReader, Он состоит из цикла while, который использует .PeekChar() проверить, существует ли больше данных для продолжения обработки.

Самая первая операция .ReadInt32() который читает 4 байта. Что, если PeekChar только "видел" один байт (или один бит)? Это не похоже на надежный способ проверки EOF.

BinaryReader построен с использованием параметров по умолчанию, который, как я понимаю, использует UTF8 в качестве кодировки по умолчанию. Я предполагаю что .PeekChar() проверяет 8 бит, но я действительно не уверен.

Сколько бит .PeekChar() Ищу? (и какие есть альтернативные методы проверки EOF?)

3 ответа

Решение

Здесь BinaryReader.PeekChar

Я читаю:

ArgumentException: текущий символ не может быть декодирован во внутренний символьный буфер с использованием кодировки, выбранной для потока.

Это ясно показывает, что объем чтения памяти зависит от кодировки, примененной к этому потоку.

РЕДАКТИРОВАТЬ

На самом деле определение в соответствии с MSDN это:

Возвращает следующий доступный символ и не продвигает позицию байта или символа. *

Infact, это зависит от кодировки, если это байт или больше...

Надеюсь это поможет.

Делая ваш Read*() вызовы вслепую и обработка любых сгенерированных исключений является нормальным методом. Я не верю, что позиция потока перемещается, если что-то пойдет не так.

Метод PeekChar() BinaryReader очень глючит. Даже при попытке чтения из потока памяти с данными в кодировке UTF8 PeekChar() выдает исключение после чтения определенной длины потока. Команда BCL признала проблему, но они не взяли на себя обязательство решить проблему. Их единственный ответ - избегать использования PeekChar(), если можете.

Другие вопросы по тегам