Zlib Inflate缓冲区错误

时间:2012-04-08 19:44:00

标签: ruby

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我相信。

1 个答案:

答案 0 :(得分: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)