Прочитать на английском

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


StreamReader.DiscardBufferedData Метод

Определение

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

public void 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"
        }
    }
}

Комментарии

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

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

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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