的Zlib膨胀缓冲区错误
问题描述:
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)
给我就行的Zlib膨胀缓冲区错误
zstream.finish
为什么是一个缓冲区错误?我相信Ruby 1.8.7。
答
上放气文档说:
一般情况下,参数冲水设置为Z_NO_FLUSH,允许 放气的多少来定的数据,以便最大限度地压缩生产输出, 之前积累。
通过使用Zlib :: NO_FLUSH,返回的值不是整个放气的流。改为使用Zlib :: FINISH。
你写的函数是在Zlib :: Deflate/Zlib :: Inflate文档中提供的函数。你可以替换你所写的所有代码:
a = Zlib::Deflate.deflate("asasasas", 6)
p a
p Zlib::Inflate.inflate(a)
如果我使用Zlib :: Inflate.inflate(a)它会引发缓冲区错误。这就是为什么我决定写这些方法。现在,当我使用Zlib :: FINISH而不是zstream.finish时,只是返回一个空字符串。 – Voldemort 2012-04-09 04:17:22
我测试过它对1.9.2。也许它在不同的ruby版本上有不同的表现?正如你刚才所说的那样,你是否在使用1.8.7? – 2012-04-09 16:44:41
刚刚在1.8.7上测试过它,它工作(使用** ruby -rzlib -e'p Zlib :: Inflate.inflate(Zlib :: Deflate.deflate(“asasasas”,6))** **)走着瞧吧。 – 2012-04-09 16:48:40