superclass=Object
type=class
library=zlib
extended=
included=

圧縮データを扱うストリームを表す抽象クラスです。
具体的な圧縮/展開の操作は、それぞれサブクラスの [[c:Zlib::Deflate]],
[[c:Zlib::Inflate]] で定義されています。

Zlib::ZStream オブジェクトは、ストリーム (struct zstream) の
入力側 (next_in) と出力側 (next_out) にそれぞれ可変長の
バッファを持ちます。以下、入力側のバッファを「入力バッファ」、
出力側のバッファを「出力バッファ」と呼びます。

Zlib::ZStream オブジェクトに入力されたデータは、一旦入力バッファの
末尾にストアされた後、ストリームからの出力がなくなるまで
(処理後 avail_out > 0 となるまで) 入力バッファの先頭から順に処理されます。
処理の間、出力バッファは全出力を保持するために必要に応じて自動的に
確保・拡張されます。

いくつかのメソッドは、出力バッファ内のデータを取り出し、
String オブジェクトとして返します。

以上を図示すると次のようになります:

     +================ an instance of Zlib::ZStream ================+
     ||                                                            ||
     ||     +--------+          +-------+          +--------+      ||
     ||  +--| output |<---------|zstream|<---------| input  |<--+  ||
     ||  |  | buffer |  next_out+-------+next_in   | buffer |   |  ||
     ||  |  +--------+                             +--------+   |  ||
     ||  |                                                      |  ||
     +===|======================================================|===+
         |                                                      |
         v                                                      |
     "output data"                                         "input data"

入力バッファの内容を処理している最中にエラーが発生した場合、
[[c:Zlib::Error]] のサブクラスの例外が発生します。その時、
入力/出力バッファは共に、エラーが発生した時点の状態をそのまま
保持します。
