18.1 입출력 스트림

데이터는 키보드를 통해 입력될 수도 있고, 파일 또는 프로그램으로부터 입력될 수도 있다. 반대로 데이터는 모니터로 출력될 수도 있고, 파일에 저장되거나 다른 프로그램으로 전송될 수 있다. 이것을 총칭해서 데이터 입출력이라고 한다.

자바는 입력 스트림과 출력 스트림을 통해 데이터를 입출력한다. 스트림(Stream)은 단방향으로 데이터가 흐르는 것을 말하는데, 데이터는 출발지에서 나와 도착지로 흘러들어간다.

입출력 스트림 시각화 (단방향 수도관 비유)

flowchart LR
    subgraph Source [출발지 (키보드, 파일 등)]
        Data1[(데이터)]
    end
    
    subgraph Program [자바 프로그램]
        App((실행 중))
    end
    
    subgraph Destination [도착지 (모니터, 파일 등)]
        Data2[(데이터)]
    end
    
    Source -->|입력 스트림 (Input Stream)\n데이터가 들어오는 파이프 🚰| Program
    Program -->|출력 스트림 (Output Stream)\n데이터가 나가는 파이프 🌊| Destination
    
    style Source fill:#f9f9f9,stroke:#333
    style Program fill:#e1d5e7,stroke:#9673a6
    style Destination fill:#f9f9f9,stroke:#333
  • 입력 스트림: 프로그램이 데이터를 입력받을 때 사용
  • 출력 스트림: 프로그램이 데이터를 출력할 때 사용

어떤 데이터를 입출력하느냐에 따라 스트림은 다음 두 종류로 구분할 수 있다.

  • 바이트 스트림: 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용
  • 문자 스트림: 문자만 입출력할 때 사용

자바는 데이터 입출력과 관련된 라이브러리를 java.io 패키지에서 제공하고 있다. java.io 패키지는 바이트 스트림과 문자 스트림을 다음과 같이 이름으로 구분해서 제공한다.

구분 바이트 스트림 문자 스트림
최상위 클래스 InputStream, OutputStream Reader, Writer
하위 클래스(예) FileInputStream, FileOutputStream, … FileReader, FileWriter, …
서브목차