StreamReader.DiscardBufferedData Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt de interne buffer gewist.
public:
void DiscardBufferedData();
public void DiscardBufferedData();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Voorbeelden
In het volgende voorbeeld ziet u een scenario waarin de DiscardBufferedData methode moet worden aangeroepen om de interne buffer en de onderliggende stroom te synchroniseren. Het bestand in het voorbeeld wordt gebruikt om de positie te illustreren en bestaat uit de tekst abcdefghijklmnopqrstuvwxyz. Door aan te roepen DiscardBufferedData nadat de gegevens zijn gelezen, werkt het voorbeeld zoals verwacht. Nadat de eerste 15 tekens zijn gelezen, wordt de positie opnieuw ingesteld op de offsetwaarde van 2 en worden alle resterende tekens gelezen. Als u de aanroep verwijdert DiscardBufferedData, werkt het voorbeeld niet zoals verwacht. De eerste 15 tekens worden gelezen, maar alleen de positie van de onderliggende stroom wordt opnieuw ingesteld. De interne buffer van het StreamReader object bevindt zich nog steeds op het 16e teken.
ReadToEnd Retourneert daarom alle tekens in de buffer plus de tekens in de onderliggende stroom vanaf de resetpositie.
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
Opmerkingen
Gebruik de DiscardBufferedData methode om de interne buffer voor het StreamReader object opnieuw in te stellen. U moet deze methode alleen aanroepen wanneer de positie van de interne buffer en de BaseStream interne buffer niet overeenkomen. Deze posities kunnen niet overeenkomen wanneer u gegevens in de buffer leest en vervolgens een nieuwe positie zoekt in de onderliggende stroom. Deze methode vertraagt de prestaties en moet alleen worden gebruikt wanneer dit absoluut noodzakelijk is, bijvoorbeeld wanneer u meer dan één keer een deel van de inhoud van een StreamReader object wilt lezen.
Zie Algemene I/O-taken voor een lijst met algemene I/O-taken.