{InputStream-of t:Type} (クラス)
public abstract shared InputStream-of {inherits {Stream-of t}, GenericInputStream}
パッケージ: CURL.IO.STREAM
直接継承しているサブクラス: BufferedInputStream-of, SeekableInputStream-of, SHA-1-ByteInputStream, SerializeInputStream

パラメータ化された入力ストリーム。


プロパティ
プロパティ 継承 Stream-of: non-blocking-supported?, open?, origin-url
プロパティ 継承 GenericInputStream: when-last-modified

メソッド
async-read:ストリームから非同期に読み込みを行います。
public {InputStream-of.async-read
out:#{Array-of t} = null,
n:int64 = max-int64,
max-chunk-size:int = 8192,
partial?:bool = false,
append?:bool = false,
event-handler:EventHandler,
...:EventHandler
}:AsyncStreamReader
close:ストリームを閉じます。呼び出されると、ストリームを使用不可能にして Stream-of.open?false を返すことを確かめます。
public {InputStream-of.close}:void
copy-out:最大 n 個のオブジェクトを self から取得し、直接 os に書き込みます。
public {InputStream-of.copy-out
os:{OutputStream-of t},
n:int64 = max-int64
}:int64
read:self から t タイプのオブジェクトを n まで読み取ります。
public {InputStream-of.read
out:#{Array-of t} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of t}, number-read:int)
read-anys:InputStream-of.read と同じですが、配列値が Array-of t ではなく {Array-of any} であるという点が異なります。
public {InputStream-of.read-anys
out:#{Array-of any} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of any}, n:int)
read-one:self から最初の要素を取得します。
public abstract {InputStream-of.read-one}:(val:t, eof?:bool)
read-one-any:InputStream-of.read-one と同じですが、戻り値が t ではなく any である点で異なります。
public {InputStream-of.read-one-any}:(val:any, eof?:bool)
to-Iterator:Iterator-of を返し、これを使用してこのストリーム内のデータを for ループ処理できます。
public {InputStream-of.to-Iterator}:{Iterator-of t}
メソッド 継承 Stream-of: verify-open
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize




プロパティ詳細


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

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

プログラミング注意事項

ストリームからデータを読み込み、AsyncStreamReadEvent イベントに登録されている任意のイベント ハンドラを呼び出します。
out: Array キーワード 。作成される AsyncStreamReadEvent で使用および再利用されます。
n: 読み込む最大量を示す int64 キーワード。既定値は max-int64 で、ストリームの最後まで読み込みます。
max-chunk-size: 一度に読み込む最大量、および AsyncStreamReadEvent に提供する新しいデータ量の最大サイズを示す int キーワード。既定値は 8192 です。
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 {InputStream-of.close}:void

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



copy-out (メソッド)
public {InputStream-of.copy-out
os:{OutputStream-of t},
n:int64 = max-int64
}:int64

最大 n 個のオブジェクトを self から取得し、直接 os に書き込みます。

os: オブジェクトが書き込まれる OutputStream
n: 書き込まれるオブジェクトの個数。既定値は max-int64 です。転送されるオブジェクトの数が n より少ない場合、存在するオブジェクトがすべてコピーされます。

戻り値

self から os に実際に転送されたオブジェクトの数を返します。戻り値が 0 の場合はストリームが EOF に到達していることを意味し、os には何も書き込まれていません。

説明

このメソッドは、n 個の要素が転送されるか、ストリームが EOF に到達するまで何も返さずに実行を続けます。

注意事項

self または os のどちらかが開いていない場合はエラーになります。

n < 0 の場合もエラーになります。


read (メソッド)
public {InputStream-of.read
out:#{Array-of t} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of t}, 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-anys (メソッド)
public {InputStream-of.read-anys
out:#{Array-of any} = null,
start:int = 0,
n:int = max-int - start,
allow-short-read?:bool = false,
non-blocking?:bool = false
}:(vals:{Array-of any}, n:int)

InputStream-of.read と同じですが、配列値が Array-of t ではなく {Array-of any} であるという点が異なります。



read-one (メソッド)
public abstract {InputStream-of.read-one}:(val:t, eof?:bool)

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

戻り値

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

説明

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

注意事項

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

オーバーライド

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


read-one-any (メソッド)
public {InputStream-of.read-one-any}:(val:any, eof?:bool)

InputStream-of.read-one と同じですが、戻り値が t ではなく any である点で異なります。



to-Iterator (メソッド)
public {InputStream-of.to-Iterator}:{Iterator-of t}

Iterator-of を返し、これを使用してこのストリーム内のデータを for ループ処理できます。