Binn (формат сериализации) - Binn (serialization format)

Бинн
Репозиторийgithub.com/ liteserver/ binn
ТипОбмен данными
ЛицензияApache 2.0
Интернет сайтgithub.com/ liteserver/ binn Отредактируйте это в Викиданных

Бинн это компьютер формат сериализации данных используется в основном для приложений Передача данных. Он хранит примитивные типы данных и структуры данных в двоичной форме.[1]

Спектакль

Формат Binn разработан, чтобы быть компактным и быстрым при чтении. Для увеличения скорости чтения элементы сохраняются с указанием их размеров. Строки заканчиваются нулем, поэтому при чтении библиотека возвращает указатель на них внутри буфера, избегая выделение памяти и копирование данных, операция, известная как нулевая копия.

Типы данных

Примитивные типы данных:

  • ноль
  • логический (истинный и ложный)
  • целое число (до 64 бит со знаком или без знака)
  • числа с плавающей запятой (одинарная / двойная точность IEEE)
  • нить
  • blob (двоичные данные)
  • Определяемые пользователем

Контейнеры:

Формат

Структуры Binn состоят из списка элементы. Каждый элемент имеет тип, за которым могут следовать размер, количество внутренних элементов и сами данные:

boolean, null: [тип] int, float (хранилище: байт, слово, двойное слово или qword): [тип] [данные] строка, blob: [тип] [размер] [данные] список, объект, карта: [тип] [размер] [количество] [данные]

Пример кодировки

А JSON данные, такие как {"Привет, мир"} сериализуется в бинне того же размера:

  \xE2                               // тип = объект (контейнер)  \x11                               // общий размер контейнера  \x01                               // элементы в контейнере (в данном случае пары ключ / значение)  \x05привет                          // имя поля  \xA0                               // тип = строка  \x05world\x00                      // значение поля (завершается нулем)

Пример кода

Запись в объект на C:

  // создаем новый объект  бинн * объект = binn_object();  // добавляем к нему значения  binn_object_set_int32(объект, "я бы", 123);  binn_object_set_str(объект, "имя", "Джон");  binn_object_set_double(объект, "общий", 2.55);  // отправляем по сети или сохраняем в файл ...  Отправить(носок, binn_ptr(объект), binn_size(объект));  // освобождаем буфер  binn_free(объект);

Чтение из этого объекта:

  int я бы = binn_object_int32(объект, "я бы");  char * имя = binn_object_str(объект, "имя");  двойной общий = binn_object_double(объект, "общий");

Смотрите также

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

  • LiteReplica, SQLite репликация и средство восстановления на определенный момент времени.
  • EJDB2, Встраиваемая библиотека C ядра СУБД JSON.
  • GameAP, Панель управления игровыми серверами.

Рекомендации

внешняя ссылка