Я заметил, что сравнение позиции с длиной не работает на StreamReader, даже если базовый BaseStream поддерживает поиск.Кажется, что StreamReader буферизует упреждающее чтение из BaseStream.Это должно быть причиной того, что StreamReader предоставляет свойство EndOfStream, что хорошо, и я бы хотел, чтобы BinaryReader сделал то же самое.
Проверка этих значений (длины и позиции) в базовом базовом потоке ведет к тому, что BinaryReader не ведет себя какStreamReader делает, то есть полагается, что BinaryReader получает только точное количество байтов из BaseStream, необходимое для выполнения вызова пользовательского метода.Предположительно, если BinaryReader на самом деле работает таким образом внутренне, именно поэтому ему не нужно предоставлять EndOfStream, но я бы очень хотел, чтобы он предоставлял такой, чтобы я знал, что конец файла правильно обрабатывается для клиентов независимо от реализации.
Конечно, читатели не являются потоками, но в отношении поведения конца файла было бы неплохо, если бы существовал общий интерфейс, позволяющий клиентам классов ввода / вывода знать, является ли А. конец файла разумной концепциейдля основного источника данных и B. когда конец файла имеет место, если A имеет смысл.