的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) 
+0

如果我使用Zlib :: Inflate.inflate(a)它会引发缓冲区错误。这就是为什么我决定写这些方法。现在,当我使用Zlib :: FINISH而不是zstream.finish时,只是返回一个空字符串。 – Voldemort 2012-04-09 04:17:22

+0

我测试过它对1.9.2。也许它在不同的ruby版本上有不同的表现?正如你刚才所说的那样,你是否在使用1.8.7? – 2012-04-09 16:44:41

+0

刚刚在1.8.7上测试过它,它工作(使用** ruby​​ -rzlib -e'p Zlib :: Inflate.inflate(Zlib :: Deflate.deflate(“asasasas”,6))** **)走着瞧吧。 – 2012-04-09 16:48:40