Sdílet prostřednictvím


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 podkladového datového proudu. Soubor v příkladu slouží k ilustraci pozice a skládá se z textu abcdefghijklmnopqrstuvwxyz. Při volání DiscardBufferedData 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 načtou. Pokud odeberete volání DiscardBufferedData, příklad nebude fungovat podle očekávání. Přečte se prvních 15 znaků, 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 plus znaky v podkladovém datovém proudu 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

DiscardBufferedData Pomocí metody resetujte vnitřní vyrovnávací paměť objektuStreamReader. Tuto metodu je třeba volat pouze v případě, že se pozice interní vyrovnávací paměti neshoduje BaseStream s hodnotou . Tyto pozice se můžou neshodovat, když načtete data do vyrovnávací paměti a pak vyhledáte novou pozici v podkladovém datovém proudu. 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 čí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é