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

标签 ruby zlib

在 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/

相关文章:

c++ - C/C++ 打包和压缩

c# - 是否有可能在损坏的部分之外恢复损坏的 Zlib 数据?

ruby-on-rails - ActiveRecord 的 find_or_create* 方法是否存在根本性缺陷?

ruby-on-rails - rails : Self joins

Ruby 在另一台服务器/网络共享上打开文件

c++ - CMake 是否需要静态库(例如 ZLIB)?

json - 解压缩 Gzip JSON 响应

c++ - 用zlib提取一个gz文件内容并保存

ruby-on-rails - 解析一个月中有太多天数的日期

ruby - Nokogiri Ruby - 从输出 html 中删除 <!DOCTYPE ... >