Сколько бит читает 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(), если можете.