StreamReader.DiscardBufferedData Metoda

Definicja

Czyści bufor wewnętrzny.Clears the internal buffer.

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

Przykłady

W poniższym przykładzie przedstawiono scenariusz, w którym DiscardBufferedData Metoda musi zostać wywołana w celu zsynchronizowania buforu wewnętrznego i bazowego strumienia.The following example shows a scenario where the DiscardBufferedData method must be called to synchronize the internal buffer and the underlying stream. Plik w przykładzie jest używany do zilustrowania położenia i składa się z tekstu abcdefghijklmnopqrstuvwxyz .The file in the example is used to illustrate position and consists of the text abcdefghijklmnopqrstuvwxyz. DiscardBufferedDataPo odczytaniu danych, przykład działa zgodnie z oczekiwaniami.By calling DiscardBufferedData after the data is read, the example works as expected. Po odczytaniu pierwszych 15 znaków pozycja jest resetowana do wartości przesunięcia 2 i wszystkie pozostałe znaki są odczytywane.After the first 15 characters are read, the position is reset to the offset value of 2 and all the remaining characters are read. W przypadku usunięcia wywołania do programu DiscardBufferedData przykład nie działa zgodnie z oczekiwaniami.If you remove the call to DiscardBufferedData, the example does not work as expected. Odczytane są pierwsze 15 znaków, ale tylko pozycja strumienia źródłowego jest resetowana.The first 15 characters are read, but only the position of the underlying stream is reset. Wewnętrzny bufor StreamReader obiektu jest nadal na szesnastym znaku.The internal buffer of the StreamReader object is still on the 16th character. W związku ReadToEnd z tym zwraca wszystkie znaki w buforze oraz znaki w źródłowym strumieniu, rozpoczynając od pozycji Reset.Therefore, ReadToEnd returns all the characters in the buffer plus the characters in the underlying stream starting from the reset position.

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

Uwagi

Użyj DiscardBufferedData metody, aby zresetować bufor wewnętrzny dla StreamReader obiektu.Use the DiscardBufferedData method to reset the internal buffer for the StreamReader object. Należy wywołać tę metodę tylko wtedy, gdy pozycja bufora wewnętrznego i nie jest BaseStream zgodna.You need to call this method only when the position of the internal buffer and the BaseStream do not match. Te pozycje mogą być niezgodne, gdy odczytujesz dane do buforu, a następnie szukasz nowego położenia w strumieniu źródłowym.These positions can become mismatched when you read data into the buffer and then seek a new position in the underlying stream. Ta metoda spowalnia wydajność i powinna być używana tylko wtedy, gdy jest to absolutnie konieczne, na przykład wtedy, gdy chcesz odczytać część zawartości StreamReader obiektu więcej niż raz.This method slows performance and should be used only when absolutely necessary, such as when you want to read a portion of the contents of a StreamReader object more than once.

Aby uzyskać listę typowych zadań we/wy, zobacz typowe zadania we/wy.For a list of common I/O tasks, see Common I/O Tasks.

Dotyczy