当我使用文本阅读器时,检测我实际上处于数据末尾的最佳方法是什么?执行此操作的通常方法如下所示,
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 不支持搜索。
还是我错过了什么?
编辑:
澄清一下,我可以使用更具体的 StreamReader 类轻松实现这一点,因为我可以检查 EoS。然而,为了让事情更笼统,我想使用 TextReader,所以我不仅仅局限于 StreamReader。但是 Peek 的语义似乎有点奇怪,如果不支持搜索,为什么它不直接抛出,为此为什么没有 TextReader 的 EoF 属性?