• Home
  • About
    • KKsDev photo

      KKsDev

      게임 프로그래머를 목표로 Unity, C#을 공부하고 있습니다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

C# 빠른 입출력 방법

11 Aug 2023

Reading time ~1 minute

C# 빠른 입출력

C# 에서는 빠른 입출력을 위해서 StreamReader, StreamWriter, BufferStream, StringBuilder 를 지원한다.



BufferedStream

입출력 스트림을 버퍼링하여 성능을 향상 시키는 클래스

버퍼링? : 입출력 작업을 한 번에 한 바이트씩 처리하는 것이 아니라 블록 단위로 처리하는 개념으로 한번에 많은양의 데이터를 처리해서 입출력 작업의 효율을 높입니다.

스트림? : 데이터의 연속적인 흐름을 나타내는 개념으로 파일, 네트워크 메모리 등 다양한 소스와 대상으로부터 데이터를 읽거나 쓸 때 사용되며, 데이터의 흐름을 추상화 한것.

Stream 클래스는 이런 스트림을 다루는 여러 메소드를 제공하고

BufferedStream 클래스는 이런 Stream 클래스를 상속해서 스트림을 버퍼링하여 처리한다.



StreamReader , StreamWriter

System.IO에 속해있는 클래스

StreamReader는 어떤 Stream을 읽는다.

즉, 어떤 입력(파일 , 네트워크 , 메모리)의 내용을 알아낼수있다.

StreamWriter는 어떤 Stream을 쓴다.

즉, 어떤 목적지로 향하는 출력(파일, 네트워크 ,메모리)에 내용을 추가한다.



StringBuilder

StringBuilder는 문자열 클래스이다.

그렇다면 String과 다른점은 무엇일까?


둘의 차이점은 String은 불변한 특성을 가지고 있기 때문에 값을 참조

(ref)로 받아서 새로운 문자열을 만들 때 기존 문자열은 그대로 두고

새로운 인스턴스(문자열)을 다시 생성한다.

즉, string에 문자열을 + 할때마다 우리는 계속해서 새로운 문자열을

생성 하고 있었다는 것이다.


하지만 StringBuilder는 내부적으로 값들을 조합하고 삭제해서

문자열을 +할때 새로운 인스턴스를 생성하지 않는다!!



Console.OpenStandardInput(), Console.OpenStandardOutput()

Console.ReadLine()이 텍스트 입력을 하나씩 읽어오는 메서드라면

OpenStandardInput()은 바이트 스트림을 열어주는 메서드로,

OpenStandardInput()을 통해 스트림이 내 프로그램으로 흘러들어오게된다.

그럼 왜 ReadLine()만 입력했을때도 텍스트 == 스트림을 읽을 수 있었을까? 사실 ReadLine() 메서드는 내부적으로 OpenStandardInput()을 호출한후 스트림을 받아서 String으로 변경하고 있었다!

결국 OpenStandardInput()메소드가 실행된 후 어떠한 스트림입력 있었다면

Console객체는 해당 스트림을 저장하게 된다!



CSharp Share Tweet +1