StreamReader.DiscardBufferedData Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vymaže vnitřní vyrovnávací paměť.
public:
void DiscardBufferedData();
public void DiscardBufferedData();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Příklady
Následující příklad ukazuje scénář, ve kterém DiscardBufferedData musí být volána metoda pro synchronizaci interní vyrovnávací paměti a základního datového proudu. Soubor v příkladu slouží k ilustraci pozice a skládá se z textu abcdefghijklmnopqrstuvwxyz.
DiscardBufferedData Voláním po přečtení dat funguje příklad podle očekávání. Po přečtení prvních 15 znaků se pozice resetuje na hodnotu posunu 2 a všechny zbývající znaky se čtou. Pokud volání DiscardBufferedDataodeberete, příklad nefunguje podle očekávání. Prvních 15 znaků se čte, ale resetuje se pouze pozice podkladového datového proudu. Vnitřní vyrovnávací paměť objektu StreamReader je stále na 16. znaku.
ReadToEnd Proto vrátí všechny znaky ve vyrovnávací paměti a znaky v podkladovém datovém proudu začínající od pozice resetování.
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
Poznámky
Použijte metodu DiscardBufferedData k resetování interní vyrovnávací paměti objektu StreamReader . Tuto metodu je třeba volat pouze v případě, že umístění vnitřní vyrovnávací paměti a BaseStream neodpovídá. Tyto pozice se můžou při čtení dat do vyrovnávací paměti lišit a pak v podkladovém datovém proudu vyhledat novou pozici. Tato metoda zpomaluje výkon a měla by být použita pouze v případě, že je to nezbytně nutné, například když chcete přečíst část obsahu objektu StreamReader více než jednou.
Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.