我可以让zlib从一开始就完全膨胀已知数量的字节吗?

时间:2014-04-09 08:22:29

标签: zlib

我想要使用zlib压缩和解压缩数据流。该流由不同大小的 N 顺序块组成。数据是相似的,所以我想连接它们以实现更好的压缩并保持单独的大小索引以便稍后将它们分开。但是我不必总是解压缩所有这些,只能从一开始就是 M 块。我可以这样做吗?即我可以告诉zlib继续解压缩流,直到我得到123456字节的解压缩数据?是这么简单,只是告诉zlib缓冲区的大小并等待inflate()返回Z_OK或者我需要指定一些FLUSH常量?

使用场景:这可以是数据库的一组更新,最新的是先打包,最后打包最后一个。假设我有从0(无数据库)到5的更新。我按相反的顺序打包它们:5,4,3,2,1,0。当数据库不存在时,我将它们全部提取并从最后一个处理到第一,完全创建数据库并应用所有更新。但是如果数据库已经存在并且处于v3,我只提取并应用更新5和4,即前两个块。当然,我可以单独打包块,但如果我连接它们,我会得到更好的压缩。

1 个答案:

答案 0 :(得分:2)

是。只需提供所需大小的输出缓冲区,并将压缩数据作为inflate()的输入提供,直到它填满输出。

请注意,要解压缩块 k ,您需要先解压缩块 1..k-1