【问题标题】:Decompress appended compressed strings [closed]解压缩附加的压缩字符串[关闭]
【发布时间】:2018-07-12 08:13:51
【问题描述】:

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

【问题讨论】:

  • 这个问题太笼统了,甚至可以用“是”、“否”和“也许”来回答。请更具体。上下文是什么?什么是压缩方案?到目前为止,您尝试过什么?
  • @Jodocus 编辑了问题以添加更多详细信息
  • 我撤回了我的投票。不过请注意,我没有投反对票。
  • decompress_string 必须在看到 Z_STREAM_END stackoverflow.com/a/17053154之后重新启动解析器
  • 解压中,你想以某种方式检索压缩期间使用的块边界吗?

标签: c++ algorithm compression zlib chunks


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 2011-06-19
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多