将多个zlib压缩数据流有效地连接到单个流中

发布于 2021-01-29 14:56:20

如果我有几个带有压缩zlib数据的二进制字符串,是否有一种方法可以 有效地 将它们组合成单个压缩字符串,而不需要解压缩所有内容?

我现在要做的示例:

c1 = zlib.compress("The quick brown fox jumped over the lazy dog. ")
c2 = zlib.compress("We ride at dawn! ")
c = zlib.compress(zlib.decompress(c1)+zlib.decompress(c2)) # Warning: Inefficient!

d1 = zlib.decompress(c1)
d2 = zlib.decompress(c2)
d = zlib.decompress(c)

assert d1+d2 == d # This will pass!

我想要的例子:

c1 = zlib.compress("The quick brown fox jumped over the lazy dog. ")
c2 = zlib.compress("We ride at dawn! ")
c = magic_zlib_add(c1+c2) # Magical method of combining compressed streams

d1 = zlib.decompress(c1)
d2 = zlib.decompress(c2)
d = zlib.decompress(c)

assert d1+d2 == d # This should pass!

我对zlib和DEFLATE算法了解不多,因此从理论上讲这可能是完全不可能的。另外,我必须使用use zlib;
因此我无法包装zlib并提出自己的协议,该协议透明地处理级联流。

注意:我不介意该解决方案在Python中不是很简单。我愿意编写一些C代码并在Python中使用ctypes。

关注者
0
被浏览
110
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    由于您不介意使用C,因此可以从查看
    gzjoin 的代码
    开始

    请注意, gzjoin 代码必须解压缩以查找合并时必须更改的部分,但不必重新压缩。这还不错,因为解压缩通常比压缩快。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看