StreamReader.DiscardBufferedData Método

Definição

Limpa o buffer interno.

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

Exemplos

O exemplo seguinte mostra um cenário em que o DiscardBufferedData método deve ser chamado para sincronizar o buffer interno e o fluxo subjacente. O ficheiro no exemplo é usado para ilustrar a posição e consiste no texto abcdefghijklmnopqrstuvwxyz. Ao ligar DiscardBufferedData após a leitura dos dados, o exemplo funciona como esperado. Após a leitura dos primeiros 15 caracteres, a posição é reimposta para o valor de deslocamento de 2 e todos os caracteres restantes são lidos. Se remover a chamada para DiscardBufferedData, o exemplo não funciona como esperado. Os primeiros 15 caracteres são lidos, mas apenas a posição do fluxo subjacente é reiniciada. O buffer interno do StreamReader objeto ainda está no 16.º carácter. Assim, ReadToEnd devolve todos os caracteres do buffer mais os caracteres do fluxo subjacente a partir da posição de reset.

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

Observações

Use o DiscardBufferedData método para reiniciar o buffer interno do StreamReader objeto. Só precisa de chamar este método quando a posição do buffer interno e o BaseStream não coincidir. Estas posições podem tornar-se desajustadas quando lês dados no buffer e depois procuras uma nova posição no fluxo subjacente. Este método abranda o desempenho e deve ser usado apenas quando absolutamente necessário, como quando quiser ler uma parte do conteúdo de um StreamReader objeto mais do que uma vez.

Para uma lista de tarefas comuns de E/S, consulte Tarefas Comuns de E/S.

Aplica-se a

Ver também