解压缩附加的压缩字符串

时间:2018-07-12 08:13:51

标签: c++ algorithm compression zlib chunks

我正在创建一个应用程序,在该应用程序中,我必须存储大量以块接收的字符串数据。 我正在尝试将其保存为压缩格式。但是,如果我使用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:C++ Code Snippet - Compressing STL Strings with zlib可以找到compress_stringdecompress_string的实现方式

1 个答案:

答案 0 :(得分:1)

您添加压缩块的想法无法正常工作,您必须将https://panthema.net/2007/0328-ZLibString.html的接口替换为zlib。

如果您在zlib中查看,则压缩例程deflate将基于avail_in用尽,待压缩的数据用尽时将停止。 将其设置为您拥有的数据量,并在获取新字符串时增加。

(如果您希望在每个步骤中都能得到有用的结果,它将变得更加复杂。)

可以分别压缩多个字符串并将它们添加在一起,但这是一个坏主意。压缩将基于输入数据中的模式,并且由于多次压缩,因此您不得不重新发现每个输入中的模式,这会增加开销,并导致更差的结果。