Лучший способ сериализации нескольких массивов с плавающей точкой в ​​файле

Я пытаюсь сериализовать несколько массивов с плавающей запятой (одинарной точности), пересекаю многие языки (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 байта.

Другие вопросы по тегам