StreamReader.DiscardBufferedData Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Rensar den interna bufferten.
public:
void DiscardBufferedData();
public void DiscardBufferedData();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Exempel
I följande exempel visas ett scenario där DiscardBufferedData metoden måste anropas för att synkronisera den interna bufferten och den underliggande strömmen. Filen i exemplet används för att illustrera position och består av texten abcdefghijklmnopqrstuvwxyz. Genom att anropa DiscardBufferedData efter att data har lästs fungerar exemplet som förväntat. När de första 15 tecknen har lästs återställs positionen till förskjutningsvärdet 2 och alla återstående tecken läss. Om du tar bort anropet till DiscardBufferedDatafungerar inte exemplet som förväntat. De första 15 tecknen är lästa, men endast den underliggande strömmens position återställs. Objektets StreamReader interna buffert är fortfarande på det 16:e tecknet.
ReadToEnd Därför returnerar alla tecken i bufferten plus tecknen i den underliggande strömmen från återställningspositionen.
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
Kommentarer
DiscardBufferedData Använd metoden för att återställa den interna bufferten StreamReader för objektet. Du behöver bara anropa den här metoden när positionen för den interna bufferten BaseStream och inte matchar. Dessa positioner kan matchas fel när du läser in data i bufferten och sedan söker efter en ny position i den underliggande dataströmmen. Den här metoden försämrar prestandan och bör endast användas när det är absolut nödvändigt, till exempel när du vill läsa en del av innehållet i ett objekt mer än en StreamReader gång.
En lista över vanliga I/O-uppgifter finns i Vanliga I/O-uppgifter.