Что делает метод FillBuffer в BinaryReader?

Согласно документации:

Заполняет внутренний буфер указанным количеством байтов, считанных из потока.

Что это значит (что такое внутренний буфер?)?

3 ответа

Решение

BinaryReader имеет внутренний буфер, так что ему не нужно выполнять так много небольших чтений в основном потоке, особенно также при чтении символьных данных, которые могут потребовать некоторого просмотра. Вам не нужно вызывать это вручную.

Похоже, что главная цель здесь - предоставить вам удобный метод, чтобы убедиться, что у вас есть блок данных локально; например, при чтении "double" вы (как правило) хотели бы 8 байтов. Этот метод завершает:

  • проверка, достаточно ли уже внутреннего буфера
  • зацикливание на "Чтение" по мере необходимости
  • проверка на EOF (и ошибки)
  • сторож для захвата
  • обработка управления буфером, такая как либо периодическое копирование данных в обратном порядке, либо обработка различных индексов для циклического буфера

Тем не менее, кажется маловероятным, что вам придется вызывать его внешне, если только вы не читаете небольшой байт [].

Что касается внутреннего буфера; просто при десериализации вас:

  • хочу свести к минимуму звонки на "Чтение"
  • часто нужно заглядывать больше, чем на 1 байт (сложно без буфера)
  • регулярно требуются операции с маленьким байтом [] (например, через BitConverter)

Так что просто работай

Обратите внимание, что метод объявлен как защищенный.

Таким образом, он представляет интерес, только если вы хотите создать класс, унаследованный от BinaryReader, что вам редко требуется делать.

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