0

stdout、stderr、およびstdinをPipe.SourceChannelを介してBytesBuffersとの間でパイプするプログラムがあります。

プログラムは各チャンネルをセレクターに登録します。

ループ内のプログラムは、stdout、stderr、およびstdinに対応するselectedKeysのセット内の各キーを定期的に繰り返します。キーごとに、キーが有効であり、読み取り可能または書き込み可能であるかどうかを判断し、有効である場合は、ByteBufferとの間で対応するIO操作を実行します。

私の質問は、プログラムの開始時に最初に選択されたキーのセット(stdin、stdout、stderrに対応)について何を想定できるかということです。

stdinのキーは、常に準備ができ、有効で、読み取り可能な最初のキーになりますか?stdoutのキーは、stdinの前に準備ができていて、有効で、読み取り可能でしょうか?

私のプログラムの振る舞いはランダムなIOの振る舞いをしているので、私は尋ねます、そして私は初期のキーセットメンバーシップについての私の仮定が間違っていると推測しています。

前もって感謝します。

4

1 に答える 1

0

ブロックせずに読み取ることができるデータがある場合、チャネルは読み取り可能です。

チャネルは、カーネル ソケットの送信バッファーに余裕がない場合を除き、書き込み可能です。これは、リーダーの読み取りよりも書き込みの方が速い場合にのみ発生します。

于 2012-08-18T01:12:10.423 に答える