Что делает метод FillBuffer в BinaryReader? - PullRequest
3 голосов
/ 18 октября 2010

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

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

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

Ответы [ 3 ]

0 голосов
/ 18 октября 2010

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

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

0 голосов
/ 18 октября 2010

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

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

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

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

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

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

0 голосов
/ 18 октября 2010

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

...