2011-02-10 22 views
1

ストリームが信頼できるデータ構造ではないということで、すべてのケースで読み書き操作が行われない可能性があることが、いくつかの記事で分かりました。ストリームの信頼性

ので:

a)は、この合意に何らかの真実がありますか?

b)読み書き操作が失敗するケースは何ですか?

私はあなたが完了するまでの読み取り/書き込み操作をループをsouldと主張出会ったストリーム上のこのコンセンサス:あなたがドキュメントに従った場合、

var bytesRead = 0; 
var _packet = new byte[8192];  
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ; 
+0

こんにちは。あなたがこのことを言っている投稿に出くわして、あなたの質問でそれらを参照する場合は、それらの投稿へのリンクを投稿して、完全な文脈を見ることができます。おそらく投稿が間違っているかもしれません。おそらくいくつかの具体的なケースがあります。言葉遣いが間違っているかもしれません。 –

+0

あなたが出会った投稿への参照はありますか?適切なタイミングでストリーム上で 'Flush'を呼び出さないと、シナリオ、電源カットやそれに類するもの(ストリームが極端な場合には他のものと同じように信頼性が高い)によっては望ましくない結果が生じる可能性があります。ストリームは閉じられます。 –

+0

あなたが見つけた記事へのリンクを提供してください。私は「C#ストリームの信頼性」を訴え、私が見つけた唯一の記事はあなたのものでした。 :)私は、何も問題なくStreamオブジェクトを使用して、マルチギガバイトのサイズのファイルを扱うコードを書いています。 –

答えて

2

キャッチし、エラーが発生したとき、私は「あなたの思いに従って行動ストリームはほんとうに弾丸であることがわかります。この信頼性に投資したコードは相当量です。

そうでないと主張する人へのリンクを表示できますか?あなたが誤解したか、または間違っています。

+0

私はもう一度それらを見つけることができました申し訳ありませんが、この問題に私を夢中にしているのは何ですか?私はちょうどそこに与えられたポイントをremmeber。 –

3

これは、あなたが話している操作と、どのレイヤーで失敗と考えるかによって異なります。

たとえば、ストリームの終わりを過ぎて(つまり、100バイトしか含まないファイルから1000バイトを読み込む、またはファイルの終わりに近い位置から1000バイトを読み込む)場合は、 1000より大きい場合)、より少ないバイトが残されます。ストリーム読み取りメソッドは、実際に読み取ったバイト数を返します。その値をチェックする必要があります。

書き込み操作では、ディスクがいっぱいになるなどしてファイルに書き込みが失敗する可能性がありますが、書き込み操作の場合は例外が戻されます。

ソケットや他のネットワークストリームに書き込む場合、Writeメソッドが例外なく返されても、相手側がそれを受け取ることができても、間違った問題が発生することは保証されません道。

しかし、懸念を緩和するために、ストリーム自体は信頼性がありません。

しかし、彼らが話す媒体は、そうである可能性があります。

+0

ありがとう、 私は投げソケットを書くしようとしています bytes_sent = 0; while(bytes_sent

関連する問題