StreamReader.DiscardBufferedData Método

Definición

Borra el búfer interno.

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

Ejemplos

En el ejemplo siguiente se muestra un escenario en el que se debe llamar al DiscardBufferedData método para sincronizar el búfer interno y la secuencia subyacente. El archivo del ejemplo se usa para ilustrar la posición y consta del texto abcdefghijklmnopqrstuvwxyz. Al llamar a DiscardBufferedData después de leer los datos, el ejemplo funciona según lo previsto. Después de leer los primeros 15 caracteres, la posición se restablece al valor de desplazamiento de 2 y se leen todos los caracteres restantes. Si quita la llamada a DiscardBufferedData, el ejemplo no funciona según lo previsto. Los primeros 15 caracteres se leen, pero solo se restablece la posición de la secuencia subyacente. El búfer interno del StreamReader objeto todavía está en el carácter 16. Por lo tanto, ReadToEnd devuelve todos los caracteres del búfer más los caracteres de la secuencia subyacente a partir de la posición de restablecimiento.

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

Comentarios

Utilice el DiscardBufferedData método para restablecer el búfer interno para el StreamReader objeto . Solo debe llamar a este método cuando la posición del búfer interno y el BaseStream no coinciden. Estas posiciones pueden no coincidir al leer datos en el búfer y, a continuación, buscar una nueva posición en la secuencia subyacente. Este método ralentiza el rendimiento y solo se debe usar cuando sea absolutamente necesario, como cuando se desea leer una parte del contenido de un StreamReader objeto más de una vez.

Para obtener una lista de las tareas de E/S comunes, consulte Tareas de E/S comunes.

Se aplica a

Consulte también