StreamReader.DiscardBufferedData StreamReader.DiscardBufferedData StreamReader.DiscardBufferedData StreamReader.DiscardBufferedData Method

Определение

Очищает внутренний буфер.Clears the internal buffer.

public:
 void DiscardBufferedData();
public void DiscardBufferedData ();
member this.DiscardBufferedData : unit -> unit
Public Sub DiscardBufferedData ()

Примеры

В следующем примере показано сценарий где DiscardBufferedData метод должен вызываться для синхронизации внутреннего буфера и базовый поток.The following example shows a scenario where the DiscardBufferedData method must be called to synchronize the internal buffer and the underlying stream. В примере это файл используется для демонстрации позиции и состоит из текста abcdefghijklmnopqrstuvwxyz.The file in the example is used to illustrate position and consists of the text abcdefghijklmnopqrstuvwxyz. Путем вызова DiscardBufferedData после чтения данных, этот пример работает должным образом.By calling DiscardBufferedData after the data is read, the example works as expected. После прочтения первых 15 символов, положение сбрасывается в значение смещения 2, и все остальные символы доступны для чтения.After the first 15 characters are read, the position is reset to the offset value of 2 and all the remaining characters are read. Если вы удалите вызов DiscardBufferedData, пример не работает должным образом.If you remove the call to DiscardBufferedData, the example does not work as expected. Первые 15 символов считываются, но только положение базового потока, сбрасывается.The first 15 characters are read, but only the position of the underlying stream is reset. Внутренний буфер StreamReader объект по-прежнему 16 символов.The internal buffer of the StreamReader object is still on the 16th character. Таким образом ReadToEnd возвращаются все символы в буфере, а также символы в базовый поток, начиная с позиции сброса.Therefore, ReadToEnd returns all the characters in the buffer plus the characters in the underlying stream starting from the reset position.

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(vbNewLine & "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 объекта.Use the DiscardBufferedData method to reset the internal buffer for the StreamReader object. Необходимо вызвать этот метод только тогда, когда положение внутреннего буфера и BaseStream не совпадают.You need to call this method only when the position of the internal buffer and the BaseStream do not match. Эти позиции могут стать несоответствия при чтении данных в буфер и затем выполнить поиск новую позицию в базовом потоке.These positions can become mismatched when you read data into the buffer and then seek a new position in the underlying stream. Этот метод снижает производительность и должны использоваться только в случае крайней необходимости, например если требуется считать часть содержимого StreamReader объекта более одного раза.This method slows performance and should be used only when absolutely necessary, such as when you want to read a portion of the contents of a StreamReader object more than once.

Список задач ввода-вывода, см. в разделе распространенные задачи ввода-вывода.For a list of common I/O tasks, see Common I/O Tasks.

Применяется к

Дополнительно