У меня есть несколько вопросов, касающихся упакованных полей и хранения / сериализации
данные с протокольными буферами.
По сути, я хочу сохранить в файл 4 МБ данных.
Данные, которые у меня есть (в нашей встроенной системе), принимаются как uint8_t (байт), и я хочу сохранить эти данные максимально эффективно.
Я тестировал множество прототипов (четыре);
repeated uint32_t datastruct = 1;
repeated uint32_t datastruct = 1 [packed = true]
с обоими вариантами, назначенными 1-к-1 (помещая uint8 в uint32), и оба варианта сдвинуты по битам с 4 значениями, помещенными в uint32_t.
К моему удивлению, сохраненные файлы намного больше оригинальных
данные. (примеры, где я помещал uint8 в uint32, конечно ожидались ..)
Лучший результат, который я смог достичь, был 5,2 МБ для данных 4 МБ, что
на самом деле это не так хорошо.
Я неправильно понял что-то важное здесь?
Я понимаю, что protobuf добавляет информацию в пакеты, но 25%
увеличение слишком много imho.
Также использование GzipOutputStream увеличивает размер файла вместо его уменьшения.
Любые советы будут очень признательны!
Спасибо за ваше время.