Недавно я узнал о буферах и хотел проверить, правильно ли я их понимаю. Я должен прочитать в файле в двоичном формате, что приводит к последовательности байтов. Чтобы использовать эти байты в моей программе, мне нужно сохранить их в векторе, а затем я могу просмотреть каждый элемент в векторе.
Таким образом, буфер — это не фактический тип данных, такой как вектор, а скорее что-то, что временно хранит данные в лучшем / более доступном формате, чтобы их можно было использовать. Это определение правильно? Я не думаю, что это имеет какое-либо значение, но я использую язык C ++.
Я думаю, что у вас это подходит для этого конкретного случая, вы используете временное хранилище для чтения байтов в память, а затем преобразуете это в фактический формат данных, который нужен вашей программе.
Тем не менее: термин буфер используется для многих вещей, в разных контекстах.
Например, буфер может быть памятью, используемой для чтения из файла в память, поэтому, когда источник запрашивает один символ (или небольшое количество байтов), библиотека времени выполнения не должна идти полностью вниз в ОС Ядро запрашивает один или небольшое количество байтов, но амортизирует эти накладные расходы на килобайт или несколько килобайт данных. Это часто скрыто во время выполнения C или C ++.
В C ++ внутренняя реализация std::stream
использования std::streambuf
обрабатывать низкоуровневый механизм буферизации для файлового ввода-вывода.
В других случаях ваши нажатия клавиш хранятся, когда система занята чем-то другим, пока приложение не успеет прочитать данные с клавиатуры.
Аналогично, существуют буферы для чтения видеопотоков из Интернета, прежде чем показывать фактический видеоконтент на экране. Потому что, если видеоплеер запрашивал только несколько байтов за раз, как они были использованы, накладные расходы на запрос сделали бы воспроизведение очень нервным.
Другим примером может быть приложение, использующее OpenCL (или, например, Cuda) для обработки некоторых данных на графическом процессоре, и для того, чтобы некоторая память сохранила данные, а затем вызов clCreateBuffer(..., size, ...)
вернет объект памяти для хранения size
байт.
Есть много других мест, где термин буфер используется в компьютерах. (И в областях, находящихся далеко от компьютеров, например, в химии [соединение, которое устойчиво к изменениям pH или помогает ограничить его изменения] и для поездов [«отбойники» в конце вагона]).
Других решений пока нет …