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)

オンラインでバッファエラーが発生します

  zstream.finish

何故ですか?Ruby1.8.7だと思います。

4

1 に答える 1

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)
于 2012-04-08T21:34:02.510 に答える