StreamReader.Read 메서드

정의

입력 스트림에서 다음 문자 또는 다음 문자 집합을 읽습니다.Reads the next character or next set of characters from the input stream.

오버로드

Read()

입력 스트림에서 다음 문자를 읽고 문자 위치를 한 문자씩 앞으로 이동합니다.Reads the next character from the input stream and advances the character position by one character.

Read(Span<Char>)

현재의 스트림에서 범위로 문자를 읽어 들입니다.Reads the characters from the current stream into a span.

Read(Char[], Int32, Int32)

현재 스트림에서 지정된 최대 문자를 지정된 인덱스부터 버퍼로 읽어 들입니다.Reads a specified maximum of characters from the current stream into a buffer, beginning at the specified index.

Read()

입력 스트림에서 다음 문자를 읽고 문자 위치를 한 문자씩 앞으로 이동합니다.Reads the next character from the input stream and advances the character position by one character.

public:
 override int Read();
public override int Read ();
override this.Read : unit -> int
Public Overrides Function Read () As Integer

반환

Int32

Int32 개체로 표시되는 입력 스트림의 다음 문자이거나, 사용할 수 있는 문자가 더 이상 없는 경우에는 -1입니다.The next character from the input stream represented as an Int32 object, or -1 if no more characters are available.

예외

I/O 오류가 발생했습니다.An I/O error occurs.

예제

다음 코드 예제에서는 메서드를 간단 하 게 사용 하는 방법을 보여 줍니다 Read .The following code example demonstrates a simple use of the Read method.

using namespace System;
using namespace System::IO;
int main()
{
   String^ path = "c:\\temp\\MyTest.txt";
   try
   {
      if ( File::Exists( path ) )
      {
         File::Delete( path );
      }
      StreamWriter^ sw = gcnew StreamWriter( path );
      try
      {
         sw->WriteLine( "This" );
         sw->WriteLine( "is some text" );
         sw->WriteLine( "to test" );
         sw->WriteLine( "Reading" );
      }
      finally
      {
         delete sw;
      }

      StreamReader^ sr = gcnew StreamReader( path );
      try
      {
         while ( sr->Peek() >= 0 )
         {
            Console::Write( (Char)sr->Read() );
         }
      }
      finally
      {
         delete sr;
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }
}
using System;
using System.IO;

class Test
{
    
    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";

        try
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            using (StreamWriter sw = new StreamWriter(path))
            {
                sw.WriteLine("This");
                sw.WriteLine("is some text");
                sw.WriteLine("to test");
                sw.WriteLine("Reading");
            }

            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    Console.Write((char)sr.Read());
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
Imports System.IO
Imports System.Text

Public Class Test

    Public Shared Sub Main()
        Dim path As String = "c:\temp\MyTest.txt"

        Try
            If File.Exists(path) Then
                File.Delete(path)
            End If

            Dim sw As StreamWriter = New StreamWriter(path)
            sw.WriteLine("This")
            sw.WriteLine("is some text")
            sw.WriteLine("to test")
            sw.WriteLine("Reading")
            sw.Close()

            Dim sr As StreamReader = New StreamReader(path)

            Do While sr.Peek() >= 0
                Console.Write(Convert.ToChar(sr.Read()))
            Loop
            sr.Close()
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

다음 코드 예제에서는 메서드 오버 로드를 사용 하 여 단일 문자를 읽고 Read() ASCII 정수 출력의 서식을 10 진수 및 16 진수로 지정 하는 방법을 보여 줍니다.The following code example demonstrates reading a single character using the Read() method overload, formatting the ASCII integer output as decimal and hexadecimal.

using namespace System;
using namespace System::IO;
int main()
{
   
   //Create a FileInfo instance representing an existing text file.
   FileInfo^ MyFile = gcnew FileInfo( "c:\\csc.txt" );
   
   //Instantiate a StreamReader to read from the text file.
   StreamReader^ sr = MyFile->OpenText();
   
   //Read a single character.
   int FirstChar = sr->Read();
   
   //Display the ASCII number of the character read in both decimal and hexadecimal format.
   Console::WriteLine( "The ASCII number of the first character read is {0:D} in decimal and {1:X} in hexadecimal.", FirstChar, FirstChar );
   
   //
   sr->Close();
}

using System;
using System.IO;

class StrmRdrRead
{
public static void Main()
    {
    //Create a FileInfo instance representing an existing text file.
    FileInfo MyFile=new FileInfo(@"c:\csc.txt");
    //Instantiate a StreamReader to read from the text file.
    StreamReader sr=MyFile.OpenText();
    //Read a single character.
    int FirstChar=sr.Read();
    //Display the ASCII number of the character read in both decimal and hexadecimal format.
    Console.WriteLine("The ASCII number of the first character read is {0:D} in decimal and {1:X} in hexadecimal.",
        FirstChar, FirstChar);
    //
    sr.Close();
    }
}
Imports System.IO

Class StrmRdrRead
   
   Public Shared Sub Main()
      'Create a FileInfo instance representing an existing text file.
      Dim MyFile As New FileInfo("c:\csc.txt")
      'Instantiate a StreamReader to read from the text file.
      Dim sr As StreamReader = MyFile.OpenText()
      'Read a single character.
      Dim FirstChar As Integer = sr.Read()
      'Display the ASCII number of the character read in both decimal and hexadecimal format.
      Console.WriteLine("The ASCII number of the first character read is {0:D} in decimal and {1:X} in hexadecimal.", FirstChar, FirstChar)
      sr.Close()
   End Sub
End Class

설명

이 메서드는 TextReader.Read를 재정의합니다.This method overrides TextReader.Read.

이 메서드는 스트림의 끝에 도달한 경우-1을 반환할 수 있도록 정수를 반환 합니다.This method returns an integer so that it can return -1 if the end of the stream has been reached. 버퍼에 데이터를 읽은 후 기본 스트림의 위치를 조작 하는 경우 내부 스트림의 위치가 내부 버퍼의 위치와 일치 하지 않을 수 있습니다.If you manipulate the position of the underlying stream after reading data into the buffer, the position of the underlying stream might not match the position of the internal buffer. 내부 버퍼를 다시 설정 하려면 메서드를 호출 합니다 DiscardBufferedData . 그러나이 메서드는 성능을 저하 시키며 반드시 필요한 경우에만 호출 해야 합니다.To reset the internal buffer, call the DiscardBufferedData method; however, this method slows performance and should be called only when absolutely necessary.

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

적용 대상

Read(Span<Char>)

현재의 스트림에서 범위로 문자를 읽어 들입니다.Reads the characters from the current stream into a span.

public:
 override int Read(Span<char> buffer);
public override int Read (Span<char> buffer);
override this.Read : Span<char> -> int
Public Overrides Function Read (buffer As Span(Of Char)) As Integer

매개 변수

buffer
Span<Char>

이 메서드가 반환될 경우, 현재의 소스에서 읽은 문자로 대체된 문자의 지정된 범위를 포함합니다.When this method returns, contains the specified span of characters replaced by the characters read from the current source.

반환

Int32

읽은 문자 수를 반환하거나 스트림의 끝에 있고 읽은 데이터가 없으면 0을 반환합니다.The number of characters that have been read, or 0 if at the end of the stream and no data was read. 데이터가 스트림 내에서 가용한지에 따라 이 수는 buffer 길이보다 작거나 같을 수 있습니다.The number will be less than or equal to the buffer length, depending on whether the data is available within the stream.

예외

스트림에서 읽은 문자 수가 buffer 길이보다 큽니다.The number of characters read from the stream is larger than the buffer length.

buffer이(가) null인 경우buffer is null.

적용 대상

Read(Char[], Int32, Int32)

현재 스트림에서 지정된 최대 문자를 지정된 인덱스부터 버퍼로 읽어 들입니다.Reads a specified maximum of characters from the current stream into a buffer, beginning at the specified index.

public:
 override int Read(cli::array <char> ^ buffer, int index, int count);
public override int Read (char[] buffer, int index, int count);
override this.Read : char[] * int * int -> int
Public Overrides Function Read (buffer As Char(), index As Integer, count As Integer) As Integer

매개 변수

buffer
Char[]

이 메서드는 지정된 문자 배열의 값이 index와 (인덱스 + 카운트 - 1) 사이에서 현재 원본로부터 읽어온 문자로 교체된 상태로 반환됩니다.When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source.

index
Int32

쓰기를 시작할 buffer의 인덱스입니다.The index of buffer at which to begin writing.

count
Int32

읽을 최대 문자 수입니다.The maximum number of characters to read.

반환

Int32

읽은 문자 수를 반환하거나 스트림의 끝에 있고 읽은 데이터가 없으면 0을 반환합니다.The number of characters that have been read, or 0 if at the end of the stream and no data was read. 이 수는 스트림 내에서 데이터를 사용할 수 있는지 여부에 따라 count 매개 변수보다 작거나 같습니다.The number will be less than or equal to the count parameter, depending on whether the data is available within the stream.

예외

버퍼 길이에서 index를 빼면 count보다 작습니다.The buffer length minus index is less than count.

buffer이(가) null인 경우buffer is null.

index 또는 count가 음수입니다.index or count is negative.

I/O 오류(예: 스트림이 닫혀 있음)가 발생합니다.An I/O error occurs, such as the stream is closed.

예제

다음 코드 예제에서는 파일의 끝에 도달할 때까지 한 번에 5 개의 문자를 읽습니다.The following code example reads five characters at a time until the end of the file is reached.

using namespace System;
using namespace System::IO;

int main()
{
   String^ path = "c:\\temp\\MyTest.txt";
   try
   {
      if ( File::Exists( path ) )
      {
         File::Delete( path );
      }
      StreamWriter^ sw = gcnew StreamWriter( path );
      try
      {
         sw->WriteLine( "This" );
         sw->WriteLine( "is some text" );
         sw->WriteLine( "to test" );
         sw->WriteLine( "Reading" );
      }
      finally
      {
         delete sw;
      }

      StreamReader^ sr = gcnew StreamReader( path );
      try
      {
         //This is an arbitrary size for this example.
         array<Char>^c = nullptr;
         while ( sr->Peek() >= 0 )
         {
            c = gcnew array<Char>(5);
            sr->Read( c, 0, c->Length );
            
            //The output will look odd, because
            //only five characters are read at a time.
            Console::WriteLine( c );
         }
      }
      finally
      {
         delete sr;
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }
}
using System;
using System.IO;

class Test
{
    
    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";

        try
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            using (StreamWriter sw = new StreamWriter(path))
            {
                sw.WriteLine("This");
                sw.WriteLine("is some text");
                sw.WriteLine("to test");
                sw.WriteLine("Reading");
            }

            using (StreamReader sr = new StreamReader(path))
            {
                //This is an arbitrary size for this example.
                char[] c = null;

                while (sr.Peek() >= 0)
                {
                    c = new char[5];
                    sr.Read(c, 0, c.Length);
                    //The output will look odd, because
                    //only five characters are read at a time.
                    Console.WriteLine(c);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
Imports System.IO
Imports System.Text

Public Class Test

    Public Shared Sub Main()
        Dim path As String = "c:\temp\MyTest.txt"

        Try
            If File.Exists(path) Then
                File.Delete(path)
            End If

            Dim sw As StreamWriter = New StreamWriter(path)
            sw.WriteLine("This")
            sw.WriteLine("is some text")
            sw.WriteLine("to test")
            sw.WriteLine("Reading")
            sw.Close()

            Dim sr As StreamReader = New StreamReader(path)

            Do While sr.Peek() >= 0
                'This is an arbitrary size for this example.
                Dim c(5) As Char
                sr.Read(c, 0, c.Length)
                'The output will look odd, because
                'only five characters are read at a time.
                Console.WriteLine(c)
            Loop
            sr.Close()
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

설명

이 메서드는 TextReader.Read를 재정의합니다.This method overrides TextReader.Read.

이 메서드는 스트림의 끝에 도달한 경우 0을 반환할 수 있도록 정수를 반환 합니다.This method returns an integer so that it can return 0 if the end of the stream has been reached.

메서드를 사용 하는 경우 Read 스트림의 내부 버퍼와 동일한 크기의 버퍼를 사용 하는 것이 더 효율적입니다. 여기서 내부 버퍼는 원하는 블록 크기로 설정 되 고는 항상 블록 크기 보다 작게 읽혀집니다.When using the Read method, it is more efficient to use a buffer that is the same size as the internal buffer of the stream, where the internal buffer is set to your desired block size, and to always read less than the block size. 스트림이 생성 될 때 내부 버퍼의 크기가 지정 되지 않은 경우 기본 크기는 4kb (4096 바이트)입니다.If the size of the internal buffer was unspecified when the stream was constructed, its default size is 4 kilobytes (4096 bytes). 버퍼에 데이터를 읽은 후 기본 스트림의 위치를 조작 하는 경우 내부 스트림의 위치가 내부 버퍼의 위치와 일치 하지 않을 수 있습니다.If you manipulate the position of the underlying stream after reading data into the buffer, the position of the underlying stream might not match the position of the internal buffer. 내부 버퍼를 다시 설정 하려면 메서드를 호출 합니다 DiscardBufferedData . 그러나이 메서드는 성능을 저하 시키며 반드시 필요한 경우에만 호출 해야 합니다.To reset the internal buffer, call the DiscardBufferedData method; however, this method slows performance and should be called only when absolutely necessary.

이 메서드는 매개 변수에서 지정한 문자 수를 count 읽거나 파일의 끝에 도달 하면 반환 됩니다.This method returns after either the number of characters specified by the count parameter are read, or the end of the file is reached. ReadBlock 는의 차단 버전입니다 Read .ReadBlock is a blocking version of Read.

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

적용 대상