当前位置: 首页 > 面试题库 >

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

汤玉宸
2023-03-14
问题内容

如果我有几个带有压缩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。


问题答案:

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

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



 类似资料:
  • Kafka流中是否内置了允许将单个输入流动态连接到多个输出流的功能?允许基于true/false谓词进行分支,但这不是我想要的。我希望每个传入日志都确定它将在运行时流到的主题,例如,日志将流到主题和日志将流到主题。 我可以在流中调用,然后写给Kafka制作人,但这似乎不是很好。在Streams框架中是否有更好的方法来实现这一点?

  • 问题内容: Gzip格式文件(gzip例如,使用程序创建的文件)使用“放气”压缩算法,该压缩算法与zlib使用的压缩算法相同。但是,使用zlib膨胀gzip压缩文件时,该库将返回Z_DATA_ERROR。 如何使用zlib解压缩gzip文件? 问题答案: python zlib库支持: RFC 1950(zlib压缩格式) RFC 1951(deflate压缩格式) RFC 1952(gzip压缩

  • Stability: 2 - Stable zlib 模块提供通过 Gzip 和 Deflate/Inflate 实现的压缩功能,可以通过这样使用它 const zlib = require('zlib'); 压缩或者解压数据流(例如一个文件)通过zlib流将源数据流传输到目标流中来完成。 const gzip = zlib.createGzip(); const fs = require('f

  • 处理内存中的数据 # zlib_memory.py import zlib import binascii original_data = b'This is the original text.' print('Original :', len(original_data), original_data) compressed = zlib.compress(original_dat

  • 问题内容: 有人可以向我解释zlib库在Nodejs中如何工作吗? 我对Node.js很陌生,还不确定如何使用缓冲区和流。 我的简单情况是一个字符串变量,我想将字符串压缩或解压缩(压缩或膨胀,gzip或gunzip等)到另一个字符串。 即(我希望它如何工作) 感谢您的帮助:) 问题答案: 更新 :没意识到在节点0.5中有一个新的内置“ zlib”模块。我在下面的答案是针对第三方node- zlib

  • 我想使用Java8 streams API对数据进行分组。所有具有父_id的行都应分组在一起。下面是示例文本文件。结果应该是一个映射,其中id是一个整数,值是各自分组的行。例如,在下面的例子中,结果将是一个包含3个条目的映射。键1对应2个值,键2对应无值,键3对应1个值。 代码片段是: 输出可以是:。 简单的规则是:如果父母ID不是空的,这些记录应该被分组到一个列表中。这个列表将被视为map中的值