[これはニシンです。人々の時間を無駄にして申し訳ありません。情報は他の誰かに役立つかもしれませんが.]
を介してテキストを簡単に読み取るために、StreamReader をラップしたカスタム メモリ ストリームがありますReadToEnd()
。問題は、決して終わらないことです。関数を継続的に呼び出してReadByte()
おり、返される値はすべて実際の値である可能性があるためRead()
、データの終わりを示すためにゼロを返すことができる関数とは異なり、ここで立ち往生しています。の仕様でReadByte()
は、データの最後に -1 を返すと書かれていますが、それによって停止することはありませんReadToEnd()
。だとしたらかなり駄目です。
ドキュメントで見つけることができるのは、「ReadToEnd は、ストリームがいつ終了したかを認識していると想定している」ということだけです。しかし、ストリームがその状態をどのように通知するかわかりません。
ストリームの最後に到達したときに例外がスローされた場合ReadByte()
、例外が StreamReader によってキャッチされないため、出力を割り当てている変数が設定されることはありません。では、ストリームの終わりに到達したことを伝えるために、その下のストリームからどのような条件を探しているのでしょうか?
すべてのコメントともう少し掘り下げた後、問題は私が忘れていた中間ストリームであることが判明しましたread()
。サブストリームを呼び出しreadbyte
、返されたデータを配列に書き込んでいました。コメントの 1 つのおかげで、配列への書き込みを続行するか終了するかを決定するために、最初に int を変数に読み取って、それが byte -1 ではなく int -1 であるかどうかを確認できることを発見したときデータがなくなったからです。
したがって、私の質問に対する答えは、シグナルは Read() がゼロを返すことであり、ReadByte がどこかで呼び出されているのを見たら、それが疑いを持ち始める場所だということです。