在 Ruby 中,我有一个缓冲区,其中包含使用 zlib compress2()
方法压缩的数据。但是,我发现无法使用 Ruby 标准库中的 Zlib 功能解压缩此数据,该标准库仅支持由 deflate
创建的数据或 GZip 格式的数据。
我如何才能在 Ruby 中实现与 uncompress()
等效的功能,最好不要求助于创建自定义 C 扩展?
编辑:
我找到了解决方案。在摆弄了 Inflate
构造函数的 window_bits
参数但没有成功之后,我终于明白了 zlib 为压缩数据添加了一个四字节 header 前缀。所以我简单地删除了那个标题,突然间它就像一个魅力:
data[0..3] = ''
data = Zlib::Inflate.inflate(data)
最佳答案
如 here 所述,您需要为 window_bits
使用负值.我遇到过类似的问题,但在 Ruby 上压缩和在 JS 上解压缩(my gist for that)。希望它有助于避免四口魔法:)
关于Ruby:解压缩 zlib 包装的压缩数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776047/