StreamReader.DiscardBufferedData Metoda

Definice

Vymaže vnitřní vyrovnávací paměť.

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

Příklady

Následující příklad ukazuje scénář, ve kterém DiscardBufferedData musí být volána metoda pro synchronizaci interní vyrovnávací paměti a základního datového proudu. Soubor v příkladu slouží k ilustraci pozice a skládá se z textu abcdefghijklmnopqrstuvwxyz. DiscardBufferedData Voláním po přečtení dat funguje příklad podle očekávání. Po přečtení prvních 15 znaků se pozice resetuje na hodnotu posunu 2 a všechny zbývající znaky se čtou. Pokud volání DiscardBufferedDataodeberete, příklad nefunguje podle očekávání. Prvních 15 znaků se čte, ale resetuje se pouze pozice podkladového datového proudu. Vnitřní vyrovnávací paměť objektu StreamReader je stále na 16. znaku. ReadToEnd Proto vrátí všechny znaky ve vyrovnávací paměti a znaky v podkladovém datovém proudu začínající od pozice resetování.

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

Poznámky

Použijte metodu DiscardBufferedData k resetování interní vyrovnávací paměti objektu StreamReader . Tuto metodu je třeba volat pouze v případě, že umístění vnitřní vyrovnávací paměti a BaseStream neodpovídá. Tyto pozice se můžou při čtení dat do vyrovnávací paměti lišit a pak v podkladovém datovém proudu vyhledat novou pozici. Tato metoda zpomaluje výkon a měla by být použita pouze v případě, že je to nezbytně nutné, například když chcete přečíst část obsahu objektu StreamReader více než jednou.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Platí pro

Viz také