或者,是否可以告诉StreamReader
将其基础流的位置重置为第一个未消耗的字节,之后BaseStream.Position
将具有所需的值?
这很重要,因为有很多东西只有流阅读器知道。这不仅是一行中的实际解析位置,而且还包括不同长度和字节顺序标记的行结尾等。
DiscardBufferedData()
无法将基础流重置到正确的位置,因此没有骰子。
背景:StreamReader
使用内部缓冲,这意味着BaseStream.Position
不同步,只会告知当前缓冲的块结束的位置。出于诊断目的,在消息中包含实际的字节偏移量是有用的,特别是对于数百兆字节的文件。使用字节偏移,可以直接转到指示的位置,而不是必须扫描整个文件以计算行结尾(当只给出行号时)。
字节偏移还有其他潜在用途,例如将流处理器中的处理切换到通过基本流执行原始读取的代码。这将允许它继续使用流读取器来处理对性能不重要的所有部分,并将原始字节处理限制在重要的部分。
有时它可以加速,达到数量级的调整......例如,像SPOJ这样的代码挑战,如INTEST - Enormous Input Test以及许多其他任务,其中CLR&#39 ;原始输入/输出可能比实际算法慢几个数量级,因此可能会不必要地超出时间限制。