Лучший способ сериализации нескольких массивов с плавающей точкой в файле
Я пытаюсь сериализовать несколько массивов с плавающей запятой (одинарной точности), пересекаю многие языки (python / java / c / cpp) с минимальным размером.
Я ожидал, что потребуется заголовок массива float и 4 байта для каждого float. Но msgpack кажется 5 байтов необходимо. https://github.com/msgpack/msgpack/issues/198
Есть ли библиотека рекомендаций для сериализации массивов с плавающей запятой? с 4 байтами или меньше на число с плавающей запятой? Или просто использовать сырые байтовые массивы?
1 ответ
Протокол буфера поддерживает "упакованные" массивы для некоторых примитивов; в основном стоимость рассчитывается как:
- заголовок поля varint для массива (1 байт для младших номеров полей)
- префикс длины байта числа байтов
- количество байтов (4 байта на значение для одинарной точности, 8 байтов на значение для двойной точности)
100 чисел с плавающей запятой одинарной точности, хранящихся с опцией "упакованные" в поле 5 (произвольно), будут стоить 1 + 2 + 400 = 403 байта.