c# – TextReader.Peek行为和检测流/阅读器的结束
发布时间:2020-12-15 04:09:16 所属栏目:百科 来源:网络整理
导读:当我使用文本阅读器时,检测到我实际上在数据末尾的最佳方法是什么?通常的方法是执行此操作,如下所示, while(reader.Peek() != -1) { ///do stuff } 但是,msdn文档here说明了以下内容 An integer representing the next character to be read,or -1 if no mo
当我使用文本阅读器时,检测到我实际上在数据末尾的最佳方法是什么?通常的方法是执行此操作,如下所示,
while(reader.Peek() != -1) { ///do stuff } 但是,msdn文档here说明了以下内容
所以我的问题是你怎么知道你是否真的在读者数据的末尾,或者读者/底层流不支持寻求,因为这里的返回值似乎含糊不清?如果我有以下内容 public void Parse(TextReader reader) { while(reader.Peek() != -1) //am I really at the end { //do stuff } } Parse(new StreamReader(new NetworkStream(....))); 因为网络流不支持寻求. 还是我错过了什么? 编辑: 为了澄清,我可以使用更具体的StreamReader类轻松实现这一点,因为我可以检查EoS.但是为了保持一般性,我想使用TextReader,所以我不仅仅与StreamReader绑定.然而,Peek的语义似乎有点奇怪,为什么它不仅仅是在寻求不支持的情况下抛出,为此为什么没有TextReader的EoF属性? 解决方法
这实际上取决于你在解析中所做的事情.
我通常会阅读,看看有多少阅读.我建议不要一次读一个角色: char[] buffer = new char[1024 * 16]; int charsRead; while ((charsRead = read.Read(buffer,buffer.Length)) > 0) { // Process buffer,only as far as charsRead } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |