Блок двоичной памяти LZ4 Decompress неизвестного размера

Я пытаюсь распаковать блок памяти, но я не знаю, какой у него исходный несжатый размер, однако я знаю, какой максимальный размер может быть у этого оригинального блока памяти.

Есть ли способ распаковать с помощью LZ4, не зная оригинального несжатого размера?

Short-Строй-Long:
Я сериализую кучу переменных в поток строк, используя стороннюю библиотеку под названием Cereal.
Cereal будет сериализовать ваши данные в поток строк, используя «переносимый двоичный формат», что означает, что при сохранении последовательности порядок байтов сохраняется и даже преобразуется в порядковый номер хост-машин.
Затем поток строк сжимается с использованием LZ4 и передается на удаленный компьютер для распаковки и десериализации.

Моя проблема в том, что LZ4 выведет блок памяти сжатых данных и целое число, указывающее размер сжатых данных. Для распаковки вам нужен сжатый размер и исходный размер, и я отправляю только сжатый блок данных на удаленные машины.

Итак, есть ли способ распаковать блок данных с помощью LZ4, не зная его первоначальный сжатый размер? По сути, «начать декомпрессию, когда у вас заканчиваются данные, которые вы сделали»

0

Решение

Функция LZ4_decompress_safe (увидеть https://github.com/Cyan4973/lz4/blob/master/lib/lz4.c#L1288Кажется, требуется только максимальный распакованный размер. В этом случае вы можете выделить достаточно большой буфер для распаковки и использовать его.

Так что или это, или перенесите оригинальный несжатый размер на удаленные машины.

РЕДАКТИРОВАТЬ: В вашем случае вы также можете использовать потоковую декомпрессию LZ4, см. этот пример кода для дополнительной информации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]