【问题标题】:Where to use StreamReader.DiscardBufferedData()? [closed]在哪里使用 StreamReader.DiscardBufferedData()? [关闭]
【发布时间】:2014-01-16 13:29:10
【问题描述】:

我有以下代码:

StreamReader StreamReader = new StreamReader("File.txt");
string Line = "";

while((Line = StreamReader.ReadLine()) != null)
{
    string Value = Line.Trim();
    string Value2 = StreamReader.ReadLine();
    int CursorValue = StreamReader.BaseStream.Position;

    if(Condition)
    {
        StreamReader.BaseStream.Position = SOMETHING_ELSE;
        Console.WriteLine(StreamReader.ReadLine());
    }

    StreamReader.BaseStream.Position = CursorValue;
}

谁能告诉我应该在哪里使用StreamReader.DiscardBufferedData()

【问题讨论】:

标签: c# streamreader


【解决方案1】:

来自 MSDN:

使用 DiscardBufferedData 方法重置 StreamReader 对象的内部缓冲区。只有当内部缓冲区的位置和BaseStream的位置不匹配时才需要调用该方法。

举个小例子:

Stream s = new MemoryStream();
StreamReader sr = new StreamReader(s);
// Read things here.
s.Position = 10;
sr.DiscardBufferedData();        // reader now reading from position 0
sr.BaseStream.Seek(10, SeekOrigin.Begin); // Reader now reading from location 10.

在你的情况下:

StreamReader.BaseStream.Position = SOMETHING_ELSE;
sr.DiscardBufferedData();
StreamReader.BaseStream.Seek(SOMETHING_ELSE, SeekOrigin.Begin);
Console.WriteLine(StreamReader.ReadLine());

别忘了再次返回:

StreamReader.BaseStream.Position = CursorValue;
sr.DiscardBufferedData();
StreamReader.BaseStream.Seek(CursorValue, SeekOrigin.Begin);

【讨论】:

    【解决方案2】:

    MSDN

    使用 DiscardBufferedData 方法重置内部缓冲区 StreamReader 对象。 只有在 内部缓冲区的位置和 BaseStream 不匹配。这些 当您将数据读入缓冲区时,位置可能会变得不匹配,并且 然后在底层流中寻找一个新位置。这种方法减慢 性能,只应在绝对必要时使用,例如 当您想读取 StreamReader 的部分内容时 不止一次地反对。有关常见 I/O 任务的列表,请参阅常见 I/O 任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2016-11-28
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多