>

Пакеты Conan>

flatbuffers

flatbuffers

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

Особенности

  • нулевые накладные расходы при чтении — доступ к данным без десериализации;
  • гибкость схем данных с обратной и прямой совместимостью;
  • минимальное использование памяти — данные хранятся в компактном бинарном формате;
  • поддержка множества языков программирования (C++, C#, Go, Java, Kotlin, JavaScript, PHP, Python, Rust, TypeScript);
  • возможность генерации кода из схемы данных (IDL);
  • отсутствие зависимостей от сторонних библиотек.

Основные компоненты

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

Схемы данных и генерация кода

Основой FlatBuffers является язык описания схем (IDL), который позволяет определять структуры данных с типами, полями и вложенными объектами. Компилятор flatc генерирует код для выбранного языка программирования на основе схемы, предоставляя типобезопасный доступ к данным.

Основные возможности схем:

  • определение таблиц (tables) для гибких структур с необязательными полями;
  • определение структур (structs) для плотного хранения данных фиксированного размера;
  • поддержка типов данных: числа (целые, с плавающей точкой), булевы, строки, массивы, векторы, юнионы;
  • пространства имен (namespaces) для организации кода;
  • аннотации для настройки сериализации и генерации кода;
  • включение других схем через директиву include.

Сериализация и бинарный формат

FlatBuffers использует компактный бинарный формат, который хранит данные в плоском буфере с выравниванием. Данные записываются в обратном порядке (с конца буфера), что позволяет эффективно добавлять новые поля с сохранением обратной совместимости.

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

  • данные хранятся в little-endian порядке по умолчанию (настраивается);
  • смещения (offsets) используются для ссылок между объектами;
  • vtables (виртуальные таблицы) для эффективного доступа к полям таблиц;
  • поддержка скалярных типов и строк с нулевым завершением;
  • возможность прямого отображения данных из файла или памяти (memory-mapped files).

API для работы с данными

Сгенерированный код предоставляет удобный API для создания, чтения и модификации плоских буферов. API варьируется в зависимости от языка, но следует общей философии FlatBuffers: создание через построитель (builder), чтение через геттеры.

Основные операции:

  • CreateXxx — создание буфера через построитель с заполнением полей;
  • GetXxx — получение доступа к уже сериализованным данным без копирования;
  • XxxBufferHasIdentifier — проверка идентификатора буфера для безопасности;
  • UnPack / Pack — конвертация между объектами языка и плоскими буферами (опционально);
  • Verify — проверка целостности буфера (валидация).

Поддержка продвинутых функций

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

Расширенные функции:

  • Векторы и массивы: поддержка векторов фиксированной длины (arrays) и переменной (vectors), включая вложенные векторы;
  • Юнионы (Unions): для хранения данных разных типов в одном поле с тегом типа;
  • Рефлексия: доступ к данным через имена полей и типов без сгенерированного кода (полезно для динамических языков или инструментов);
  • JSON-совместимость: конвертация между FlatBuffers и JSON через сгенерированный парсер/сериализатор;
  • Разделяемые буферы (Split buffers): разделение данных и схемы для уменьшения размера передаваемых данных;
  • Грязное чтение/запись (Dirty reads/writes): возможность модификации буфера на месте с осторожностью.

Инструменты и утилиты

В комплект FlatBuffers входят инструменты для работы со схемами и данными, которые упрощают разработку и отладку.

Основные инструменты:

  • flatc — компилятор схем в код для разных языков, а также конвертер в/из JSON;
  • flathash — генерация хешей для схем (для идентификации версий);
  • libflatbuffers — библиотека времени выполнения (требуется для C++, для некоторых языков код полностью автономен).

Интеграция и использование

FlatBuffers легко интегрируется в проекты благодаря минимальным зависимостям и поддержке множества языков. Он широко используется в игровых движках (например, в Cocos2d-x и других), мобильных приложениях, системах обмена сообщениями и IoT-устройствах.

Типичные сценарии использования:

  • Сохранение и загрузка игровых состояний и конфигураций;
  • Сетевые протоколы для многопользовательских игр и распределенных систем;
  • Обмен данными между микросервисами с минимальной задержкой;
  • Хранение больших объемы структурированных данных с быстрым доступом;
  • Конфигурационные файлы с высокой производительностью чтения.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "flatbuffers/24.3.25@aurora",
    )    

Процесс локальной сборки описан в документации.

flatbuffers

Memory Efficient Serialization Library
Лицензия
Apache-2.0
Версия
Домашняя страница
Скачать
x86_64
1.57 Mb
MD5: 204f0f5e4dfa2d76601daea4c6db0e90
Updated: 04.09.2025, 11:19:43
armv7
1.39 Mb
MD5: 16eb90f4a64a49b43041fc9cf9cd152e
Updated: 04.09.2025, 11:19:41
armv8
1.44 Mb
MD5: 6fa7e07cf362ec9531a6c64f9a1f5a63
Updated: 04.09.2025, 11:19:28
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.