首页 > 解决方案 > 解压附加的压缩字符串

问题描述

我正在创建一个应用程序,我必须在其中存储大量字符串数据 - 以块的形式接收。我正在尝试以压缩格式保存它。但是,如果我使用 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_stringdecompress_string可以从C++ 代码片段 - Compressing STL Strings with zlib中找到

标签: c++algorithmcompressionzlibchunks

解决方案


您添加压缩块的想法效果不佳,您必须将该接口https://panthema.net/2007/0328-ZLibString.html替换为 zlib。

如果您查看 zlib 内部,您会看到压缩例程deflate将在用完要压缩的数据时停止,基于avail_in. 将其设置为您拥有的数据量,并在获得新字符串时增加。

(如果你想在每一步都有可用的结果,它会变得更加复杂。)

单独压缩多个字符串并将它们添加在一起是可能的,但这是一个坏主意。它会增加开销,并给出更糟糕的结果,因为压缩是基于输入数据中的模式,并且通过多次压缩,您必须重新发现每个输入中的模式。


推荐阅读