StreamReader.DiscardBufferedData Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Limpa o buffer interno.
public:
void DiscardBufferedData();
public void DiscardBufferedData ();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Exemplos
O exemplo a seguir mostra um cenário em que o DiscardBufferedData método deve ser chamado para sincronizar o buffer interno e o fluxo subjacente. O arquivo no exemplo é usado para ilustrar a posição e consiste no texto abcdefghijklmnopqrstuvwxyz
. Ao chamar DiscardBufferedData depois que os dados são lidos, o exemplo funciona conforme o esperado. Depois que os primeiros 15 caracteres são lidos, a posição é redefinida para o valor de deslocamento de 2 e todos os caracteres restantes são lidos. Se você remover a chamada para DiscardBufferedData, o exemplo não funcionará conforme o esperado. Os primeiros 15 caracteres são lidos, mas apenas a posição do fluxo subjacente é redefinida. O buffer interno do StreamReader objeto ainda está no 16º caractere. Portanto, ReadToEnd retorna todos os caracteres no buffer mais os caracteres no fluxo subjacente a partir da posição de redefinição.
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
Comentários
Use o DiscardBufferedData método para redefinir o buffer interno para o StreamReader objeto . Você precisa chamar esse método somente quando a posição do buffer interno e o BaseStream não corresponderem. Essas posições podem se tornar incompatíveis quando você lê dados no buffer e, em seguida, busca uma nova posição no fluxo subjacente. Esse método reduz o desempenho e deve ser usado somente quando absolutamente necessário, como quando você deseja ler uma parte do conteúdo de um StreamReader objeto mais de uma vez.
Para obter uma lista de tarefas comuns de E/S, consulte Tarefas comuns de E/S.