Ruby: 解压缩zlib封装的deflate数据

4
在Ruby中,我有一个包含使用zlib的compress2()方法压缩的数据的缓冲区。但是我发现没有办法使用Ruby标准库中仅支持deflate或GZip格式数据的Zlib功能来解压缩此数据。
我如何在Ruby中实现等效于uncompress()的功能,最好不要创建自定义C扩展?
编辑:
我找到了解决方案。在尝试使用Inflate构造函数中的window_bits参数进行调整而未成功后,我最终理解了zlib使用四字节头文件前缀压缩数据。因此,我只需删除该头文件前缀,就可以完美地实现解压缩:
  data[0..3] = ''
  data = Zlib::Inflate.inflate(data)
2个回答

2

此处所述,您需要使用负值作为 window_bits 的值。 我曾经遇到类似的问题,但是是在Ruby中进行压缩,在JS中进行解压缩(这是我的代码片段)。希望它能帮助您避免使用四个字节的魔法 :)


1

文档表明Ruby的inflate类将解压缩compress2()的输出,该输出格式为zlib。我刚试过了,它可以正常工作。你的压缩数据可能没有完整地传输到Ruby。


感谢确认它确实受支持。在修改输入数据之前,我无法让"Inflate"类正常工作,但知道它应该可以工作真的很有帮助 :) - Marcus Ilgner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接