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(vbNewLine & "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.

적용 대상

추가 정보