2012-04-08 8 views
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) 

は私のライン上のバッファエラーZlibのふくらませるのバッファエラー

zstream.finish 

を与えますか? Ruby 1.8.7私は信じています。

答えて

0

デフレート上のドキュメントは言う:

は、通常、パラメータフラッシュは デフレート圧縮を最大にするために出力、 を生成する前に、蓄積するデータの量を決定することができます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)を使用すると、バッファエラーをスローします。だから私はそれらの方法を書くことに決めました。今、zstream.finishの代わりにZlib :: FINISHを使用すると、空の文字列が返されます。 – Voldemort

+0

私は1.9.2に対してそれをテストしました。多分、それは異なったルビーバージョンで動作するでしょうか?最初に言ったように1.8.7を使用していますか? –

+0

ちょうどそれを1.8.7でテストして、動作します(** ruby​​ -rzlib -e 'p Zlib :: Inflate.inflate(Zlib :: Deflate.deflate( "asasasas"、6))**)何が起こるか見る。 –

関連する問題