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

时间:2013-07-21 19:31:18

标签: ruby zlib

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

如何在Ruby中实现等效的uncompress(),最好不要求助于创建自定义C-extension?

编辑:

我找到了解决方案。在摆弄window_bits构造函数的Inflate参数后,我没有成功,我终于明白zlib用四字节标题为压缩数据添加前缀。所以我只是删除了那个标题,突然之间就像一个魅力:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

documentation表示Ruby inflate类将解压缩compress2()的输出,该输出采用zlib格式。我刚尝试过,它运行正常。您的压缩数据可能无法完整地保存到Ruby。