InflateByteInputStream (クラス)
public InflateByteInputStream {inherits ByteInputStream, {AsyncFillData-of byte}}
パッケージ: CURL.IO.ZSTREAM

基礎となる ByteInputStream から読み取られたデータを解凍します。

説明

データは zlib 形式または gzip 形式のデータのいずれかから解凍されます。その両方が DEFLATE 圧縮データ形式を使用します。DEFLATE は、LZ77 アルゴリズムとハフマン コーディングの組み合わせてデータを圧縮する可逆的な圧縮データ形式です。The DEFLATE 形式は RFC1951 で定義されます (http://www.ietf.org/rfc/rfc1951.txt を参照してください)。
DeflateByteOutputStream で圧縮されたデータは、InflateByteInputStream で解凍できます。

プログラミング注意事項

これは、InflateByteInputStream.defaultcompression-format = CompressionFormat.zlib で呼び出される場合、HTTP ヘッダー "Content-Encoding: deflate" を持つ Web サーバーから取得したデータを解凍するために使用できます。InflateByteInputStream.defaultcompression-format = CompressionFormat.gzip で呼び出される場合、HTTP ヘッダー "Content-Encoding: gzip" でデータを解凍するために使用できます。可能な圧縮形式のリストと共に HTTP ヘッダー "Accept-Encoding" が HTTP リクエストに含まれている場合、多くの Web サーバーは圧縮データのみを送信します。

コンストラクタ
default:InflateByteInputStream を初期化します。
コンストラクタ public {InflateByteInputStream.default
stream:ByteInputStream,
close-stream-on-close?:bool = true,
buffer-size:int = -1,
compression-format:CompressionFormat = CompressionFormat.zlib
}

プロパティ
non-blocking-supported?:特定のインスタンスまたはサブクラスが non-blocking? フラグをサポートし、InputStream-of.read または OutputStream-of.write のようなメソッドで使用できるかどうかを示します。
アクセサ public InflateByteInputStream.non-blocking-supported?:bool
open?:このストリームが現在開いているかどうかを示します。Stream-of.close が呼び出されると false を返します。
アクセサ public InflateByteInputStream.open?:bool
origin-url:このストリームを開いた Url を返します。そのような Url が存在しない場合は null を返します。
アクセサ public InflateByteInputStream.origin-url:#Url
when-last-modified:元のデータの最終変更時刻 (特定できる場合)。
アクセサ public InflateByteInputStream.when-last-modified:#DateTime

メソッド
async-read:ストリームから非同期に読み込みを行います。
public {InflateByteInputStream.async-read
out:#{Array-of byte} = null,
n:int64 = max-int64,
max-chunk-size:int = 8180,
partial?:bool = false,
append?:bool = false,
event-handler:EventHandler,
...:EventHandler
}:AsyncStreamReader
close:ストリームを閉じます。呼び出されると、ストリームを使用不可能にして Stream-of.open?false を返すことを確かめます。
public {InflateByteInputStream.close}:void
read:self から t タイプのオブジェクトを n まで読み取ります。
public {InflateByteInputStream.read
out:#{Array-of byte} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of byte}, number-read:int)
read-one:self から最初の要素を取得します。
public {InflateByteInputStream.read-one}:(b:byte, eof?:bool)
メソッド 継承 InputStream-of: copy-out, read-anys, read-one-any, to-Iterator
メソッド 継承 Stream-of: verify-open
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (コンストラクタ)
public {InflateByteInputStream.default
stream:ByteInputStream,
close-stream-on-close?:bool = true,
buffer-size:int = -1,
compression-format:CompressionFormat = CompressionFormat.zlib
}

InflateByteInputStream を初期化します。

stream: 圧縮データを含む基礎となる ByteInputStream です。
close-stream-on-close?: このクラスの close メソッドが、基礎となるストリーム上で close を呼び出すかどうかを指定します。
buffer-size: 基礎となるストリームの読み取りで使用するバッファ サイズ (バイト単位) です。既定値は 8180 です。
compression-format: 圧縮された入力データの形式です。既定値は zlib です。



プロパティ詳細
non-blocking-supported? (アクセサ)
アクセサ public InflateByteInputStream.non-blocking-supported?:bool

特定のインスタンスまたはサブクラスが non-blocking? フラグをサポートし、InputStream-of.read または OutputStream-of.write のようなメソッドで使用できるかどうかを示します。

注意事項

また、これにより、InputStream-of または OutputStream-of 内のメソッドの既定実装は、呼び出すメソッド InputStream-of.read-one または OutputStream-of.write-one がどんな場合でもブロックしないものと仮定します。それらのメソッドが特定のサブクラスでブロックできる場合は、Stream-of.non-blocking-supported?false のままでいるか、InputStream-of.read または OutputStream-of.write の既定実装をオーバーライドしてブロック不可サポートを提供するようにする必要があります。


open? (アクセサ)
アクセサ public InflateByteInputStream.open?:bool

このストリームが現在開いているかどうかを示します。Stream-of.close が呼び出されると false を返します。

注意事項

InputStream-of および OutputStream-of の既定の実装で使用します。ストリームが開いていない場合は多くの操作でエラーが発生します。

オーバーライド

サブクラスにはこのメソッドを実装する必要があります。


origin-url (アクセサ)
アクセサ public InflateByteInputStream.origin-url:#Url

このストリームを開いた Url を返します。そのような Url が存在しない場合は null を返します。

{read-open {url "file://c:/foo.txt"}}.origin-url Url file://c:/foo.txt (そのようなファイルが存在すると仮定して) を返します。

一方、{{TextInputStream-from String} "foo"}.origin-urlnull を返します。


when-last-modified (アクセサ)
アクセサ public InflateByteInputStream.when-last-modified:#DateTime

元のデータの最終変更時刻 (特定できる場合)。

説明

基となるデータが最後に修正された時間がわかる場合は、その時間を返します。そうでなければ、null を返します。 http: URL を基にして作成されたストリームの場合は、存在すれば Last-Modified HTTP ヘッダーをパースした時間となります。 DefaultBufferedInputStream-of のような他のストリームをラップしたストリームの場合は、一般的に基になるストリームの値となります。 それ以外のストリームは null を返します。





メソッド詳細
async-read (メソッド)
public {InflateByteInputStream.async-read
out:#{Array-of byte} = null,
n:int64 = max-int64,
max-chunk-size:int = 8180,
partial?:bool = false,
append?:bool = false,
event-handler:EventHandler,
...:EventHandler
}:AsyncStreamReader

ストリームから非同期に読み込みを行います。

プログラミング注意事項

ストリームからデータを読み込み、AsyncStreamReadEvent イベントに登録されている任意のイベント ハンドラを呼び出します。
out: Array キーワード 。作成される AsyncStreamReadEvent で使用および再利用されます。
n: 読み込む最大量を示す int64 キーワード。既定値は max-int64 で、ストリームの最後まで読み込みます。
max-chunk-size: 一度に読み込む最大量、および AsyncStreamReadEvent に提供する新しいデータ量の最大サイズを示す int キーワード。既定値は 8180 です。
partial?: n 個のアイテムが読み込まれる前、またはストリームの最後に達する前に AsyncStreamReadEvent を送信するかどうかを示す bool キーワード。つまり、読み込まれるチャンクごとにイベントを送信するかどうか、append?true の場合にチャンクごとにファイル関連イベントを送信するかどうかどうかを指定することにもなります。既定値は false です。
append?: AsyncStreamReadEvent のいずれかが新規のデータだけを受け取るか、それまでに読み込まれた全データの継続バッファを受け取るかを示す bool キーワード。さらに、out が指定されている場合は、これに追加するかまたはクリアしてから使用するかを示します。既定値は false です。
event-handler: AsyncStreamReadEvent を受け取る EventHandler。少なくとも 1 つを指定する必要があります。
...: AsyncStreamReadEvent を必須引数とする EventHandler を複数記述できます。

戻り値

非同期読み込みを制御するための AsyncStreamReader

注意事項

EventHandler は引数で指定された順序とは逆の順番で呼び出され、これを使用して、読み込みが終了したときに (イベントの exception フィールドが非 null になるか、または done? フラグが true になった場合) Stream を閉じることができます。AsyncStreamReadEvent のデータは {Array-of t} です。


close (メソッド)
public {InflateByteInputStream.close}:void

ストリームを閉じます。呼び出されると、ストリームを使用不可能にして Stream-of.open?false を返すことを確かめます。



read (メソッド)
public {InflateByteInputStream.read
out:#{Array-of byte} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of byte}, number-read:int)

self から t タイプのオブジェクトを n まで読み取ります。

out: オブジェクトを受け取る Arraynull (既定値) の場合は、新しい Array が割り当てられて返されます。
start: オブジェクトはこのパラメータが指定するスロットから out に書き込まれます。
n: 読み取られるオブジェクトの最大数。
allow-short-read?: この呼び出しが n 未満の数を返すか、データのストリーム全体を返すかを示します。既定は false です。ほとんどのストリームではサポートされていませんが、サポートされていない場合でもエラーや例外は発生しません。予想されるデータ量が事前に明らかでなく、追加のデータを待機するべきではないネットワーキングのような状況でこれを使用します。
non-blocking?: 呼び出しの非ブロッキング実行、つまり直ちに使用できるデータがない場合にデータを読み込まずにすぐに返すかどうかを示します。既定は false です。これが true の場合は、allow-short-read? は暗黙的に true になります。

戻り値

結果を受け取った {Array-of t} および受け取った結果の数を返します。out を指定するとそれが返されます。それ以外の場合、このメソッドは新規の {Array-of t} を割り当ててそれを返します。

2 つ目の戻り値が -1 の場合、ストリームが EOF であることを示します。その場合、データは読み込まれていません。さらに non-blocking? が true の場合、戻り値が 0 になる可能性があり、これはすぐに使用できるデータがないことを示します。

説明

allow-short-read? または non-blocking?true でない限り、このメソッドは n 要素が読み取られるか、ストリームが EOF になるまで返されません。この場合、準備が完了しているデータ量を返します (ただし、allow-short-read? だけが true の場合は少なくとも 1 つが返されます)。

non-blocking?true でない限り、self がまだ開いていて、使用できるデータがない場合にはこのメソッドはブロックします。

注意事項

self が現在開いていない場合はエラーが発生します。

start < 0 or n < 0 の場合はエラーが発生します。


read-one (メソッド)
public {InflateByteInputStream.read-one}:(b:byte, eof?:bool)

self から最初の要素を取得します。

戻り値

最初の戻り値は self の入力ストリームから取得したアイテムになります。ストリームが EOF の場合、2 番目の戻り値は true になります。その場合、最初の戻り値は null または 0 になります。

説明

self がまだ開いていて、使用できるデータがない場合にはこのメソッドはブロックします。

注意事項

現在 self が開いてなく読み込み可能でない場合はエラーになります。

オーバーライド

非抽象サブクラスにより実装される必要があります。実装では次のようなコードを含める必要があリます。
{if not self.open? then
    {throw {new IOException, {format "%s not open", self}}}
}
このメソッドの実装の上部に記述します。