StreamReader.DiscardBufferedData 메서드

정의

내부 버퍼를 지웁니다.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(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 합니다.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.

일반적인 i/o 작업 목록은 일반적인 I/o 작업을 참조 하세요.For a list of common I/O tasks, see Common I/O Tasks.

적용 대상