StreamReader.DiscardBufferedData 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
清除內部緩衝區。
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 工作。