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