首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要缓冲TextReader?

是否需要缓冲TextReader?
EN

Stack Overflow用户
提问于 2012-08-09 08:12:33
回答 2查看 768关注 0票数 1

缓冲TextReader有意义吗?

TextReader有自己的内部缓冲区,我可以在创建时设置大小,所以有什么原因需要使用自己的缓冲区并调用Read( buffer, index, count ),而不是使用Read()逐个获取字符

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-09 08:27:26

谁知道Read()方法的内部有多复杂呢?希望它们被优化为尽可能地快速和高效。但可能调用单次Read(...)会更快。方法,然后迭代字符数组。但另一个重要的问题是:在您的情况下,性能差异是否重要?如果你每分钟只读100个字符一次或两次,那么性能可能无关紧要。如果您按顺序处理多兆字节的文件,那么您可能希望获得最佳性能。如果是后者,那么同样的答案总是适用的:测量,不要猜测。

票数 2
EN

Stack Overflow用户

发布于 2012-08-09 08:43:53

这取决于你在做什么。如果您读取的固定长度记录不是由流中的CR+LF对分隔的,那么您将希望执行如下操作

代码语言:javascript
复制
public static void Process()
{
  using ( Stream s = OpenCommunicationsStream() )
  using ( TextReader tr = new StreamReader(s)   )
  {
    char[] record = char[80] ;
    int chars_read ;

    while ( (chars_read=tr.Read(record,0,record.Length)) == record.Length )
    {
      DoSomethingWithRecord( record ) ;
    }
    if ( chars_read > 0 ) throw new InvalidDataException("wrong length record") ;
  }
  return ;
}

为什么您可能使用Read/0而不是Read/3ReadBlock/3,这完全取决于您的需求和您的上下文。例如,如果您正在编写解析器,您可能希望逐个字符地处理入站文本流,特别是因为TextReader通过其Peek()方法免费为您提供了一个前视字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11875044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档