是否有可能获得StreamReader相对于其底层流的真实读取位置?

时间:2016-02-27 09:51:13

标签: c# performance

或者,是否可以告诉StreamReader将其基础流的位置重置为第一个未消耗的字节,之后BaseStream.Position将具有所需的值?

这很重要,因为有很多东西只有流阅读器知道。这不仅是一行中的实际解析位置,而且还包括不同长度和字节顺序标记的行结尾等。

DiscardBufferedData()无法将基础流重置到正确的位置,因此没有骰子。

背景:StreamReader使用内部缓冲,这意味着BaseStream.Position不同步,只会告知当前缓冲的块结束的位置。出于诊断目的,在消息中包含实际的字节偏移量是有用的,特别是对于数百兆字节的文件。使用字节偏移,可以直接转到指示的位置,而不是必须扫描整个文件以计算行结尾(当只给出行号时)。

字节偏移还有其他潜在用途,例如将流处理器中的处理切换到通过基本流执行原始读取的代码。这将允许它继续使用流读取器来处理对性能不重要的所有部分,并将原始字节处理限制在重要的部分。

有时它可以加速,达到数量级的调整......例如,像SPOJ这样的代码挑战,如INTEST - Enormous Input Test以及许多其他任务,其中CLR&#39 ;原始输入/输出可能比实际算法慢几个数量级,因此可能会不必要地超出时间限制。

0 个答案:

没有答案