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 時。

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

適用於

另請參閱