StreamReader.DiscardBufferedData Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Czyści bufor wewnętrzny.
public:
void DiscardBufferedData();
public void DiscardBufferedData ();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Przykłady
Poniższy przykład przedstawia scenariusz, w DiscardBufferedData którym należy wywołać metodę w celu zsynchronizowania wewnętrznego buforu i bazowego strumienia. Plik w przykładzie służy do ilustrowania pozycji i składa się z tekstu abcdefghijklmnopqrstuvwxyz
. Wywołanie metody DiscardBufferedData po odczytaniu danych działa zgodnie z oczekiwaniami. Po odczytaniu pierwszych 15 znaków pozycja jest resetowana do wartości przesunięcia 2, a wszystkie pozostałe znaki są odczytywane. Jeśli usuniesz wywołanie metody DiscardBufferedData, przykład nie będzie działać zgodnie z oczekiwaniami. Pierwsze 15 znaków jest odczytywanych, ale tylko pozycja bazowego strumienia jest resetowany. Wewnętrzny bufor StreamReader obiektu nadal znajduje się na 16 znakach. ReadToEnd W związku z tym zwraca wszystkie znaki w buforze oraz znaki w strumieniu bazowym, począwszy od pozycji resetowania.
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
DiscardBufferedData Użyj metody , aby zresetować wewnętrzny bufor obiektuStreamReader. Należy wywołać tę metodę tylko wtedy, gdy pozycja buforu wewnętrznego i nie jest zgodna BaseStream . Te pozycje mogą stać się niezgodne podczas odczytywania danych do buforu, a następnie wyszukiwania nowej pozycji w strumieniu bazowym. Ta metoda spowalnia wydajność i powinna być używana tylko wtedy, gdy jest to absolutnie konieczne, na przykład gdy chcesz odczytać część zawartości StreamReader obiektu więcej niż raz.
Aby uzyskać listę typowych zadań we/wy, zobacz Typowe zadania we/wy.