StreamReader.DiscardBufferedData Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Очищает внутренний буфер.
public:
void DiscardBufferedData();
public void DiscardBufferedData();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()
Примеры
В следующем примере показан сценарий, в котором DiscardBufferedData метод должен вызываться для синхронизации внутреннего буфера и базового потока. Файл в примере используется для иллюстрации позиции и состоит из текста abcdefghijklmnopqrstuvwxyz. Вызывая DiscardBufferedData после чтения данных, пример работает должным образом. После чтения первых 15 символов позиция сбрасывается на значение смещения 2, а остальные символы считываются. Если вы удалите вызов DiscardBufferedData, пример не работает должным образом. Первые 15 символов считываются, но сбрасывается только позиция базового потока. Внутренний буфер StreamReader объекта по-прежнему находится на 16-м символе.
ReadToEnd Поэтому возвращает все символы в буфере и символы в базовом потоке, начиная с позиции сброса.
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
Комментарии
DiscardBufferedData Используйте метод для сброса внутреннего буфера StreamReader для объекта. Этот метод необходимо вызывать только в том случае, если позиция внутреннего буфера и BaseStream не совпадает. Эти позиции могут быть несовместимы при чтении данных в буфер, а затем искать новую позицию в базовом потоке. Этот метод замедляет производительность и следует использовать только при абсолютной необходимости, например, если требуется прочитать часть содержимого StreamReader объекта более одного раза.
Список распространенных задач ввода-вывода см. в разделе Распространенные задачи ввода-вывода.