Сколько бит читает BinaryReader.PeekChar ()? - PullRequest
7 голосов
/ 25 августа 2011

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 25 августа 2011

Здесь BinaryReader.PeekChar

Я прочитал:

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

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

EDIT

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

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

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

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

1 голос
/ 25 августа 2011

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

0 голосов
/ 29 декабря 2017

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

...