StreamReader.DiscardBufferedData Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.