我正在创建一个应用程序,在该应用程序中,我必须存储大量以块接收的字符串数据。 我正在尝试将其保存为压缩格式。但是,如果我使用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_string
和decompress_string
的实现方式
答案 0 :(得分:1)
您添加压缩块的想法无法正常工作,您必须将https://panthema.net/2007/0328-ZLibString.html的接口替换为zlib。
如果您在zlib中查看,则压缩例程deflate
将基于avail_in
用尽,待压缩的数据用尽时将停止。
将其设置为您拥有的数据量,并在获取新字符串时增加。
(如果您希望在每个步骤中都能得到有用的结果,它将变得更加复杂。)
可以分别压缩多个字符串并将它们添加在一起,但这是一个坏主意。压缩将基于输入数据中的模式,并且由于多次压缩,因此您不得不重新发现每个输入中的模式,这会增加开销,并导致更差的结果。