Открыть сервис

Бефер — формат сериализации данных

Бефер (англ. BEFER, Binary Efficient Format for Exchange and Retrieval) — формат сериализации структурированных данных, разработанный для компактного представления и быстрой передачи информации между вычислительными системами. Относится к классу бинарных форматов обмена данными и применяется преимущественно в задачах, где требуется сочетание малого размера сообщения и высокой скорости декодирования, например во встраиваемых системах, телеметрии и сетевом обмене.

Общая характеристика

Бефер представляет данные в виде последовательности типизированных записей, каждая из которых состоит из заголовка и полезной нагрузки. Заголовок содержит идентификатор поля и его тип, что позволяет декодеру интерпретировать поток без обращения к внешней схеме. Такая организация роднит бефер с форматами самодокументируемых сообщений, однако в отличие от текстовых представлений (JSON, XML) он использует двоичное кодирование, что снижает накладные расходы на служебные символы.

Ключевые свойства формата:

  • компактность — отсутствие избыточной текстовой разметки;
  • однозначность — строгая типизация полей;
  • потоковость — возможность обработки по мере поступления байтов;
  • расширяемость — поддержка необязательных полей.

История

Формат возник в среде разработчиков встраиваемого программного обеспечения как ответ на ограничения существовавших решений. Текстовые форматы оказывались слишком объёмными для каналов с низкой пропускной способностью, а многие бинарные протоколы требовали жёстко фиксированной схемы, что затрудняло эволюцию систем. Бефер задумывался как компромисс: сохранить самодокументируемость и одновременно минимизировать размер сообщения.

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

Структура сообщения

Сообщение бефера состоит из последовательности полей. Каждое поле кодируется парой «тег — значение», где тег определяет номер поля и его тип. Числовые типы (целые, с плавающей точкой) записываются в машинном представлении, строки — с указанием длины, составные типы (массивы, вложенные структуры) — рекурсивно.

КомпонентНазначение
Тег поляИдентификатор и тип данных
ДлинаРазмер полезной нагрузки для переменных типов
ЗначениеСобственно данные
Признак концаМаркер завершения составного поля

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

Классификация типов

Формат поддерживает базовый набор типов, достаточный для большинства прикладных задач:

  • целые числа со знаком и без знака различной разрядности;
  • числа с плавающей точкой одинарной и двойной точности;
  • логический тип;
  • строки в кодировке UTF-8;
  • двоичные блоки произвольной длины;
  • массивы и вложенные структуры.

Такое разделение соответствует распространённой практике бинарных форматов и обеспечивает предсказуемое поведение при кодировании и декодировании.

Применение

Бефер применяется в сценариях, где важны экономия трафика и скорость обработки. К типичным областям относятся:

  • телеметрия и сбор показаний с удалённых устройств;
  • обмен сообщениями между компонентами распределённых систем;
  • хранение структурированных записей в компактном виде;
  • протоколы взаимодействия встраиваемых контроллеров.

В перечисленных случаях выигрыш достигается за счёт отказа от текстовой разметки и применения однобайтовых или переменной длины тегов.

Сравнение с другими форматами

По назначению бефер сопоставим с такими решениями, как Protocol Buffers, MessagePack и CBOR. Все они относятся к бинарным самодокументируемым форматам, однако различаются деталями кодирования тегов, поддержкой схем и объёмом служебной информации. Бефер ближе к MessagePack по принципу «тег — значение», но допускает более гибкое расширение за счёт явного указания длины составных полей.

От текстовых форматов бефер отличается меньшим размером сообщения и более высокой скоростью разбора, однако уступает им в удобстве отладки: содержимое потока нечитаемо без специальных инструментов.

Реализации и инструменты

Существуют библиотеки для кодирования и декодирования бефера на ряде языков программирования, включая C, C++ и Python. Инструменты командной строки позволяют преобразовывать сообщения в читаемое представление и обратно, что упрощает диагностику. Открытое описание формата даёт возможность создавать совместимые реализации независимо от исходной.

Ограничения

К ограничениям формата относят отсутствие единого реестра тегов, из-за чего разным приложениям приходится согласовывать значения полей самостоятельно. Кроме того, бинарная природа затрудняет ручное редактирование и визуальный контроль данных. Некоторые реализации не поддерживают циклические ссылки и требуют ациклической структуры сообщения.

IRONLIVE — база данных и аналитика по компаниям России.

На главную IRONLIVE →