You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中TextReader.ReadLine()的Read()与Peek()方法重写机制

TextReader的Read()与Peek()方法重写逻辑(针对Console.ReadLine场景)

TextReader作为抽象基类,其默认的Peek()和Read()方法仅返回-1(表示无可用数据),但Console.ReadLine()依赖的是Console.In对应的TextReader子类实例,这个子类重写了两个方法来实现实际的控制台输入读取:

  • 重写Read()方法:
    该方法会与系统控制台输入API交互,从用户输入流中读取单个字符的UTF-16码位(返回int类型)。当有用户输入字符时,返回对应字符的编码值;仅当输入流结束(比如按下Ctrl+Z)时,才返回-1。

  • 重写Peek()方法:
    该方法实现了"预读不消耗"的逻辑:查询控制台输入缓冲区的下一个可用字符,返回其UTF-16码位,但不会移动读取指针(即该字符会保留在缓冲区中,供后续Read()读取)。如果没有可用字符(用户未输入或流结束),则返回-1。

TextReader.ReadLine()的工作流程:

  1. 循环调用Peek()检查是否有可用字符;
  2. 当Peek()返回非-1值时,调用Read()读取字符并缓存;
  3. 直到Peek()检测到换行符(\n)或流结束,将缓存的字符拼接为字符串返回。

内容的提问来源于stack exchange,提问作者Alexander Summers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:01:02