テキストリーダーを使用している場合、実際にデータの最後にいることを検出するための最良の方法は何ですか?これを行う通常の方法は、次のようなものです。
while(reader.Peek() != -1)
{
///do stuff
}
ただし、ここのmsdnドキュメントには次のように記載されています
次に読み取る文字を表す整数。使用可能な文字がなくなった場合、またはリーダーがシークをサポートしていない場合は-1。
だから私の質問は、あなたが本当にリーダーデータの最後にいるのか、それともリーダー/基になるストリームがここでの戻り値があいまいなように見えるのでシークをサポートしていないのかをどうやって見分けるのですか?たとえば、私が以下を持っている場合
public void Parse(TextReader reader)
{
while(reader.Peek() != -1) //am I really at the end
{
//do stuff
}
}
Parse(new StreamReader(new NetworkStream(....)));
networkstreamはシークをサポートしていないため。
それとも私は何かを逃したことがありますか?
編集:
明確にするために、EoSをチェックできるので、より具体的なStreamReaderクラスを使用してこれを簡単に実装できます。ただし、より一般的なものにするために、私はTextReaderを使用したかったので、StreamReaderだけに縛られることはありません。ただし、Peekのセマンティクスは少し奇妙に思えます。シークがサポートされていない場合にスローしないのはなぜですか。また、この目的のために、TextReaderのEoFプロパティがないのはなぜですか。