class Zlib::Inflate

要約

入力データを展開するストリームのクラス。Zlib::Deflate と違い、このクラスのインスタンスを複製 (clone, dup) することはできません。

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

Zlib::ZStreamから継承しているメソッド

特異メソッド

inflate(string) -> String[permalink][rdoc]

string を展開します。

ちなみに、このメソッドは以下のコードとほぼ同じです:

require 'zlib'

def inflate(string)
  zstream = Zlib::Inflate.new
  buf = zstream.inflate(string)
  zstream.finish
  zstream.close
  buf
end
[PARAM] string:
展開する文字列を指定します。
[EXCEPTION] Zlib::NeedDict:
展開に辞書が必要な場合に発生します。
require 'zlib'

cstr = "x\234\313\310OOUH+MOTH\315K\001\000!\251\004\276"
p Zlib::Inflate.inflate(cstr) #=> "hoge fuga end"
new(window_bits = Zlib::MAX_WBITS) -> Zlib::Inflate[permalink][rdoc]

展開ストリームを作成します。

[PARAM] window_bits:
ウィンドウの大きさを整数で指定します。 nil の場合はデフォルトの値を使用します。詳細は zlib.h を参照してください。
require 'zlib'

cstr = "x\234\313\310OOUH+MOTH\315K\001\000!\251\004\276"
inz = Zlib::Inflate.new(15)
inz << cstr
p inz.finish #=> "hoge fuga end"

インスタンスメソッド

self << string -> self[permalink][rdoc]

Zlib::Inflate#inflate と同じように string を展開ストリームに入力しますが、Zlib::Inflate オブジェクトそのものを返します。展開ストリームからの出力は、出力バッファに保存されます。

require 'zlib'

cstr = "x\234\313\310OOUH+MOTH\315K\001\000!\251\004\276"
inz = Zlib::Inflate.new
inz << cstr[0, 10]
p inz.flush_next_out #=> "hoge fu"

inz << cstr[10..-1]
p inz.flush_next_out #=> "ga end"
finish -> String[permalink][rdoc]

展開ストリームを終了します。

ストリーム内に残っていたデータ (つまり圧縮データの後についていたゴミデータ) を返します。 Zlib::ZStream#finished? が真でない時に finish を呼ぶと例外が発生します。

展開ストリームは圧縮データ内に終了コードを発見した時点で自ら終了するため、明示的に finish を呼ぶ必要は必ずしもありませんが、このメソッドは圧縮データが正しく終了しているかを確認するのに便利です。

require 'zlib'

cstr = "x\234\313\310OOUH+MOTH\315K\001\000!\251\004\276"
inz = Zlib::Inflate.new
inz << cstr
p inz.finish #=> "hoge fuga end"
inflate(string) -> String[permalink][rdoc]

string を展開ストリームに入力します。

処理後、ストリームからの出力を返します。このメソッドを呼ぶと出力バッファ及び入力バッファは空になります。 string が nil の場合はストリームへの入力を終了します。(Zlib::ZStream#finish と同じ)。

[PARAM] string:
展開する文字列を入力します。
[EXCEPTION] Zlib::NeedDict:
展開に辞書が必要な場合に発生します。 Zlib::Inflate#set_dictionary メソッドで辞書をセットした後で、空文字列と共にこのメソッドを再度呼び出して下さい。
require 'zlib'

cstr = "x\234\313\310OOUH+MOTH\315K\001\000!\251\004\276"
inz = Zlib::Inflate.new
p inz.inflate(cstr) #=> "hoge fuga end"
set_dictionary(string) -> String[permalink][rdoc]

展開に用いる辞書を指定します。string を返します。このメソッドは Zlib::NeedDict 例外が発生した直後のみ有効です。詳細は zlib.h を参照して下さい。

[PARAM] string:
展開に用いる辞書を文字列で指定します。
require 'zlib'

def case2(str, dict)
  dez = Zlib::Deflate.new
  dez.set_dictionary(dict)
  comp_str = dez.deflate(str)
  comp_str << dez.finish
  comp_str.size
  inz = Zlib::Inflate.new
  begin
    inz.inflate(comp_str)
  rescue Zlib::NeedDict
  end
  # 展開に用いる辞書が必要です。
  inz.set_dictionary(dict)
  p inz.inflate(comp_str)
end
dict = 'hoge_fuga_ugougo'
sset = [ dict, 'taeagbamike', 'ugotagma', 'fugebogya' ]
g = [ 0, 0, 0, 1, 1, 1, 0, 0, 0, 3, 3, 3, 0, 0, 1, 1,
      0, 0, 0, 1, 2, 2, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0]
str = g.collect{|m| sset.at(m)}.join("")

case2(str, dict)
sync(string) -> bool[permalink][rdoc]

string を入力バッファの末尾に追加し、次の full flush point まで読み飛ばします。入力バッファ内に full flush point が存在しない場合は、入力バッファを空にし false を返します。入力バッファ内に full flush point が見つかった場合は true を返し、残りのデータは入力バッファ内に保持されます。

[PARAM] string:
入力バッファの末尾に追加する文字列を指定します。
sync_point? -> bool[permalink][rdoc]

[TODO] zlib.h にもドキュメントが無い?

What is this?