トップ «前の日記(2007-06-28) 最新 次の日記(2007-06-30)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-06-29

_ NetworkStream.DataAvailable

ふと気になったのだが(というか、気になるコードを見たわけだが)、

NetworkStream に読み取り対象のデータがあるかどうかを示す値を取得します。
……
プロパティ値
ストリームからデータを読み取ることができる場合は true。それ以外の場合は false。

という記述を読んで、

while (stm.DataAvailable)
{
    int len = stm.read(buffer, 0, buffer.Length);
    memory.write(buffer, 0, len);
}
stm.Close(); // 読取完了
というコードを書くというのは、常識がないのか、それともMSDNの説明が不足しているのか、どっちなんだろう? (つまり、おれは常識がないように思う。しかし、そんな常識はどこにあるんだ? と聞かれると確かによくわからないと言えばわからないわけだし)

追記:sawatさんのコメント。うーん、まあ「読んでいない」というのは論外として、「理解していない」としたら、どうするのが良いかなぁ? この程度のプロパティの説明に「ブロッキングモードのソケットに対する擬似ノンブロッキング処理を行う場合の読み込み可能性のチェックのために利用します。クライアントが送信するすべてのデータの受信完了を調べるためには、ブロッキングモードの場合はreadメソッドが0を返すまでreadを実行してください」みたいな噛んで含めるような説明が必要か(しかも、特定ユースケースの例しか挙げることはできないし)とか。まあ、現場では教えれば済むわけだけど。

富豪的な別解:常に予想される送信データ長より大きなバッファを利用する。

_ 常識の構成要素

転送は間欠におこなわれる

多層

バッファリング

ノンブロッキングモードの存在

アベイルという言葉の意味

あたりかなぁ?


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え