Поделиться через


StreamReader.DiscardBufferedData Метод

Определение

Очищает внутренний буфер.

public:
 void DiscardBufferedData();
public void DiscardBufferedData ();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()

Примеры

В следующем примере показан сценарий, в котором DiscardBufferedData необходимо вызвать метод для синхронизации внутреннего буфера и базового потока. Файл в примере используется для иллюстрации позиции и состоит из текста abcdefghijklmnopqrstuvwxyz. При вызове DiscardBufferedData после считывания данных пример работает должным образом. После чтения первых 15 символов положение сбрасывается до значения смещения 2, а все остальные символы считываются. Если удалить вызов DiscardBufferedData, пример не будет работать должным образом. Первые 15 символов считываются, но сбрасывается только позиция базового потока. Внутренний буфер объекта по-прежнему StreamReader находится на 16-м символе. Таким образом, ReadToEnd возвращает все символы в буфере плюс символы в базовом потоке, начиная с позиции сброса.

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        string path = @"c:\temp\alphabet.txt";

        using (StreamReader sr = new StreamReader(path))
        {
            char[] c = null;

            c = new char[15];
            sr.Read(c, 0, c.Length);
            Console.WriteLine("first 15 characters:");
            Console.WriteLine(c);
            // writes - "abcdefghijklmno"

            sr.DiscardBufferedData();
            sr.BaseStream.Seek(2, SeekOrigin.Begin);
            Console.WriteLine("\nBack to offset 2 and read to end: ");
            Console.WriteLine(sr.ReadToEnd());
            // writes - "cdefghijklmnopqrstuvwxyz"
            // without DiscardBufferedData, writes - "pqrstuvwxyzcdefghijklmnopqrstuvwxyz"
        }
    }
}
Imports System.IO

Module Module1

    Sub Main()
        Dim path As String = "c:\temp\alphabet.txt"

        Dim sr As StreamReader = New StreamReader(path)
        Dim c(14) As Char

        sr.Read(c, 0, c.Length)
        Console.WriteLine("first 15 characters:")
        Console.WriteLine(c)
        ' writes - "abcdefghijklmno"

        sr.DiscardBufferedData()
        sr.BaseStream.Seek(2, SeekOrigin.Begin)
        Console.WriteLine(Environment.NewLine & "Back to offset 2 and read to end: ")
        Console.WriteLine(sr.ReadToEnd())
        ' writes - "cdefghijklmnopqrstuvwxyz"
        ' without DiscardBufferedData, writes - "pqrstuvwxyzcdefghijklmnopqrstuvwxyz"
        sr.Close()
    End Sub

End Module

Комментарии

Используйте метод , DiscardBufferedData чтобы сбросить внутренний буфер для StreamReader объекта . Этот метод необходимо вызывать только в том случае, если позиции внутреннего буфера BaseStream и не совпадают. Эти позиции могут не совпадать при чтении данных в буфер, а затем при поиске новой позиции в базовом потоке. Этот метод замедляет производительность и должен использоваться только при крайней необходимости, например, если требуется считывать часть содержимого StreamReader объекта несколько раз.

Список распространенных задач ввода-вывода см. в разделе Общие задачи ввода-вывода.

Применяется к

См. также раздел