Распаковать добавленные сжатые строки

Я создаю приложение, в котором мне нужно хранить много строковых данных — полученных кусками.
Я пытаюсь сохранить его в сжатом формате. однако, если я использую zlib для сжатия строк и аналогичным образом добавляю к нему более сжатые фрагменты, распаковка завершается неудачно.

std::string allinput = "AAAA";
std::string cstr1 = compress_string( allinput );

std::string allinput2 = "BBBB";
std::string cstr2 = compress_string( allinput2 );

std::string cstr = cstr1 + cstr2;

std::string out = decompress_string( cstr );
std::cout << "DECOMP:" << out << "\n" ;

С помощью приведенного выше кода я получаю следующий вывод:

AAAA

Есть ли способ распаковать добавленные куски сжатых строк

PS: реализация compress_string а также decompress_string можно найти из Фрагмент кода C ++ — сжатие строк STL с помощью zlib

1

Решение

Ваша идея добавления сжатых блоков не будет работать хорошо, и вы должны заменить этот интерфейс, https://panthema.net/2007/0328-ZLibString.html Злибу.

Если вы загляните внутрь zlib, вы увидите, что процедура сжатия deflate остановится, когда закончится сжатие данных на основе avail_in,
Установите это количество данных, которое у вас есть, и увеличьте, когда вы получите новую строку.

(Если вы хотите получать полезные результаты на каждом этапе, это становится более сложным.)

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

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector