在哪里使用StreamReader.DiscardBufferedData()?

时间:2014-01-16 13:29:10

标签: c# streamreader

我有以下代码:

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()吗?

2 个答案:

答案 0 :(得分:4)

来自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);

答案 1 :(得分:1)

MSDN

  

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

相关问题