최원종의 개발 블로그

자바 I/O 개론 본문

Java/JAVA 유용한 클래스

자바 I/O 개론

chl6698 2026. 3. 20. 15:03

I/O는 Input / Output의 약자.

프로그램이 외부와 데이터를 주고받는 모든 행위를 I/O라고 한다

System.out.println("Hello");         // Output : 프로그램 → 콘솔 화면
Scanner sc = new Scanner(System.in); // Input  : 키보드 → 프로그램

 

I/O스트림(stream)

- 프로그램이 데이터를 읽고(Input), 내보내는(Output) 흐름

 

 

자바의 스트림 흐름 핵심 개념

[파일] ──── 스트림(Stream) ────► [프로그램]
            데이터가 흐름

 

단방향성

  • 데이터는 한 방향으로만 흐름
  • 한 번 읽은 데이터는 되돌아갈 수 없음

순차적 접근

  • 데이터는 들어온 순서대로 처리 됨
  • 한 번 지나간 데이터는 다시 꺼낼 수 없음


I/O 클래스 

 

방향 기준

읽기  →  InputStream  또는  Reader
쓰기  →  OutputStream 또는  Writer

 

데이터 종류 기준

이미지, 동영상, zip 등  →  바이트 기반  (InputStream / OutputStream)
텍스트, 한글 등         →  문자 기반   (Reader / Writer)

 

클래스 구조

java.io 패키지
│
├──  바이트 기반  (모든 종류의 파일)
│     InputStream  ──► FileInputStream, BufferedInputStream
│     OutputStream ──► FileOutputStream, BufferedOutputStream
│
└── 문자 기반  (텍스트 파일 전용, 한글 안깨짐)
      Reader  ──► FileReader, BufferedReader, InputStreamReader
      Writer  ──► FileWriter, BufferedWriter, OutputStreamWriter

 

클래스 해석

FileInputStream  =  File(파일) + Input(읽기) + Stream(바이트)
                 =  "파일에서 바이트로 읽기"
                 
FileOutputStream =  File(파일) + Out(쓰기) + Stream(바이트)
                 =  "파일에서 바이트로 쓰기"

BufferedWriter   =  Buffered(버퍼) + Writer(문자 쓰기)
                 =  "버퍼를 사용해서 문자로 쓰기"

스트림 체이닝 기능

 

스트림은 여러 개를 연결(체이닝)해서 기능을 확장할 수 있음

기반 스트림에 보조 스트림을 감싸서 기능을 추가하는 방식 

// FileReader (파일 읽기) + BufferedReader (성능 향상 + 한 줄 읽기) 연결
BufferedReader br = new BufferedReader(new FileReader("example.txt"));
[파일] → FileReader → BufferedReader → [프로그램]
          (문자 읽기)   (버퍼 + readLine 기능 추가)
             ↑ 기반 스트림      ↑ 보조 스트림

 

클래스 선택 기준

 텍스트 파일 (한글 포함 가능)
    읽기 → FileReader         성능 필요하면 → BufferedReader
    쓰기 → FileWriter         성능 필요하면 → BufferedWriter

이미지 / 동영상 / zip (바이너리 파일)
    읽기 → FileInputStream    성능 필요하면 → BufferedInputStream
    쓰기 → FileOutputStream   성능 필요하면 → BufferedOutputStream

키보드 입력
    간단할 때       → Scanner
    입력이 많을 때  → BufferedReader + InputStreamReader

'Java > JAVA 유용한 클래스' 카테고리의 다른 글

FileInputStream  (0) 2026.03.20
자바 표준 입출력( 키보드, 콘솔)  (0) 2026.03.20
멀티 스레딩(multi-threading)  (0) 2026.03.13
Inner class(중첩 클래스)  (0) 2026.03.12
Thread  (0) 2026.03.10