2013-07-21 41 views
3

在Ruby中,我有一个缓冲区,其中包含使用zlib compress2()方法压缩的数据。但是,我发现没有办法使用Ruby标准库中的Zlib功能来解压缩数据,该功能仅支持由deflate创建的数据或GZip格式的数据。Ruby:解压缩zlib包裹的deflate数据

如何才能在Ruby中实现相当于uncompress(),最好不诉诸创建自定义C扩展?

编辑:

我找到了解决方案。经过window_bits构造函数的参数摆脱Inflate构造函数没有成功之后,我终于明白,zlib以四字节标题为压缩数据前缀。因此,我简单地除去该标头和突然它像一个魅力:

data[0..3] = '' 
    data = Zlib::Inflate.inflate(data) 

回答

0

documentation表明红宝石膨胀类将解压缩compress2的输出(),它是在ZLIB格式。我只是试了一下,它工作正常。您的压缩数据可能不会完整保存到Ruby中。

+0

感谢您确认它确实支持。我无法让'Inflate'类在没有修改我的输入数据的情况下工作,但知道它应该工作真的很有帮助:) –

1

您需要使用window_bits的负值,如here所述。我遇到过类似的问题,但在Ruby上压缩并在JS上解压缩(my gist for that)。希望它有助于避免魔术与四口之一:)