Binn (формат сериализации) - Binn (serialization format)
Репозиторий | github |
---|---|
Тип | Обмен данными |
Лицензия | Apache 2.0 |
Интернет сайт | github |
Бинн это компьютер формат сериализации данных используется в основном для приложений Передача данных. Он хранит примитивные типы данных и структуры данных в двоичной форме.[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, Панель управления игровыми серверами.