0
def deflate(string, level)
  z = Zlib::Deflate.new(level)
  dst = z.deflate(string, Zlib::NO_FLUSH)
  z.close
  return dst
end

def inflate(string)
  zstream = Zlib::Inflate.new
  buf = zstream.inflate(string)
  zstream.finish
  zstream.close
  return buf
end

a = deflate("asasasas",6)
p a
p inflate(a)

在线给我一个缓冲区错误

  zstream.finish

这是为什么?我相信 Ruby 1.8.7。

4

1 回答 1

0

关于 deflate 的文档说:

通常参数flush设置为Z_NO_FLUSH,它允许deflate决定在产生输出之前要积累多少数据,以最大限度地压缩。

通过使用 Zlib::NO_FLUSH,返回的值不是整个压缩流。请改用Zlib::FINISH

您编写的函数是 Zlib::Deflate / Zlib::Inflate 文档中提供的函数。您可以替换您编写的所有代码:

a = Zlib::Deflate.deflate("asasasas", 6)
p a
p Zlib::Inflate.inflate(a)
于 2012-04-08T21:34:02.510 回答