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 タスク」を参照してください。

適用対象

こちらもご覧ください