Я пытаюсь распаковать блок памяти, но я не знаю, что это оригинальный несжатый размер, однако я знаю максимальный размер, который мог бы быть в этом первоначальном блоке памяти.LZ4 Decompress Двоичный блок памяти неизвестного размера
Есть ли способ распаковать LZ4 без знания исходного несжатого размера?
Short-Story-Long: Я сериализую кучу переменных в поток строк, используя стороннюю библиотеку под названием Cereal. Cereal будет сериализовать ваши данные в строковый поток, используя «переносимый двоичный формат», что означает, что endianness сохраняется и даже конвертируется в хост-машины во время десериализации, если это необходимо. Строковый поток затем сжимается с использованием LZ4 и передается на удаленный компьютер для декомпрессии и десериализации.
Моя проблема заключается в том, что LZ4 выдаст блок памяти сжатых данных и целое число, определяющее размер сжатых данных. Для распаковки вам нужен сжатый размер и исходный размер, и я отправляю только сжатый блок данных на удаленные компьютеры.
SO, есть ли способ распаковать блок данных с помощью LZ4, не зная, что это оригинальный сжатый размер? По сути, «начать декомпрессию, когда у вас закончились данные, которые вы закончили»
'LZ4_decompress_safe (const char * source, char * dest, int compressSize, int maxDecompressedSize)' требует compressSize; передача 0/NULL приводит к неудачной декомпрессии. Все методы декомпрессии запрашивают параметр compressSize/originalSize, который неизвестен, но с максимальным значением. – KKlouzal
Вы имеете в виду, что у вас нет сжатого размера, размер декомпрессии или нет? –
Я не знаю «истинный» сжатый размер; Это может быть всего 500 байтов, но хранится внутри большего буфера в 1436 байт. Передача 1436 как «compressSize» терпит неудачу, когда передача 500 будет успешной. – KKlouzal