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 タスク を参照してください。
適用対象
こちらもご覧ください
.NET