StreamReader.DiscardBufferedData Methode

Definitie

Hiermee wordt de interne buffer gewist.

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

Voorbeelden

In het volgende voorbeeld ziet u een scenario waarin de DiscardBufferedData methode moet worden aangeroepen om de interne buffer en de onderliggende stroom te synchroniseren. Het bestand in het voorbeeld wordt gebruikt om de positie te illustreren en bestaat uit de tekst abcdefghijklmnopqrstuvwxyz. Door aan te roepen DiscardBufferedData nadat de gegevens zijn gelezen, werkt het voorbeeld zoals verwacht. Nadat de eerste 15 tekens zijn gelezen, wordt de positie opnieuw ingesteld op de offsetwaarde van 2 en worden alle resterende tekens gelezen. Als u de aanroep verwijdert DiscardBufferedData, werkt het voorbeeld niet zoals verwacht. De eerste 15 tekens worden gelezen, maar alleen de positie van de onderliggende stroom wordt opnieuw ingesteld. De interne buffer van het StreamReader object bevindt zich nog steeds op het 16e teken. ReadToEnd Retourneert daarom alle tekens in de buffer plus de tekens in de onderliggende stroom vanaf de resetpositie.

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

Opmerkingen

Gebruik de DiscardBufferedData methode om de interne buffer voor het StreamReader object opnieuw in te stellen. U moet deze methode alleen aanroepen wanneer de positie van de interne buffer en de BaseStream interne buffer niet overeenkomen. Deze posities kunnen niet overeenkomen wanneer u gegevens in de buffer leest en vervolgens een nieuwe positie zoekt in de onderliggende stroom. Deze methode vertraagt de prestaties en moet alleen worden gebruikt wanneer dit absoluut noodzakelijk is, bijvoorbeeld wanneer u meer dan één keer een deel van de inhoud van een StreamReader object wilt lezen.

Zie Algemene I/O-taken voor een lijst met algemene I/O-taken.

Van toepassing op

Zie ook