在Ruby中,我有一个包含使用zlib compress2()
方法压缩的数据的缓冲区。但是我发现无法使用Ruby标准库中的Zlib功能解压缩此数据,该标准库仅支持deflate
创建的数据或GZip格式的数据。
如何在Ruby中实现等效的uncompress()
,最好不要求助于创建自定义C-extension?
编辑:
我找到了解决方案。在摆弄window_bits
构造函数的Inflate
参数后,我没有成功,我终于明白zlib用四字节标题为压缩数据添加前缀。所以我只是删除了那个标题,突然之间就像一个魅力:
data[0..3] = ''
data = Zlib::Inflate.inflate(data)
答案 0 :(得分:2)
您需要使用window_bits
的负值,如here所述。我遇到了类似的问题,但是要压缩Ruby并在JS上解压缩(my gist for that)。希望它有助于避免魔法四咬:)
答案 1 :(得分:0)
documentation表示Ruby inflate类将解压缩compress2()的输出,该输出采用zlib格式。我刚尝试过,它运行正常。您的压缩数据可能无法完整地保存到Ruby。