I/O Stream
- 자바(Java)는 파일 읽기와 쓰기, 네트워크 통신 등 데이터를 다룰 때 I/O Stream(입출력 스트림)을 사용합니다.
- I/O는 "Input/Output"의 약자로, 데이터를 입력하거나 출력하는 작업을 뜻합니다.
- Stream은 데이터를 한 방향으로 흐르게 하는 통로라고 생각하면 쉽습니다. 예를 들어, 수도관을 통해 물이 흐르듯, 데이터도 스트림을 통해 한쪽에서 다른 쪽으로 이동합니다.
1. Input Stream
- 외부로부터 데이터를 읽어오는 통로
- ex. 파일에서 텍스트 읽기, 키보드 입력받기
2. Output Stream
- 데이터를 외부로 내보내는 통로
- ex. 파일에 데이터 쓰기, 화면에 텍스트 출력하기
특징
- 스트림은 순차적으로 데이터 처리
- 스트림은 데이터를 순차적으로 한 바이트 또는 한 문자씩 처리합니다.
- 이를 통해 데이터 크기에 상관없이 작은 메모리로 효율적으로 작업할 수 있습니다.
- 계층적 구조
- 자바의 I/O는 클래스와 인터페이스로 이루어진 계층적 구조를 가지고 있습니다. 이를 통해 필요한 기능을 유연하게 조합할 수 있습니다.
- ex. FileInputStream은 파일에서 바이트를 읽는 스트림이고, BufferedInputStream은 읽는 속도를 높이기 위해 데이터에 버퍼를 추가한 스트림입니다.

종류
1. 바이트 스트림 (Byte Stream)
- 데이터를 1바이트씩 처리
- 주로 바이너리 데이터(이미지, 동영상 등)나 파일을 다룰 때 사용
- 클래스 : InputStream, OutputStream (추상 클래스), FileInputStream, FileOutputStream 등
FileInputStream fis = new FileInputStream("example.txt");
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
fis.close();
2. 문자 스트림 (Character Stream)
- 데이터를 2바이트(문자 단위)로 처리
- 텍스트 데이터를 다룰 때 적합
- 클래스 : Reader, Writer (추상 클래스), FileReader, FileWriter 등
FileReader fr = new FileReader("example.txt");
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
fr.close();
3. 버퍼 스트림 (Buffered Stream)
- 데이터를 한 번에 묶어서 처리하여 속도 향상
- 바이트와 문자 스트림 모두에 적용 가능
- 클래스 : BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter 등
BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
요약
I/O Stream은 데이터를 입력받거나 출력할 때 사용하는 통로이다.
출처
1. OpenAI의 ChatGPT (https://openai.com)
2. 이미지 : https://www.tutorialspoint.com/java/java_files_io.htm
Java - Files and I/O
Java - Files and I/O - The java.io package contains nearly every class you might ever need to perform input and output (I/O) in Java. All these streams represent an input source and an output destination. The stream in the java.io package supports many dat
www.tutorialspoint.com
'프로그래머스 > Java' 카테고리의 다른 글
| [Java 문법] @Builder (0) | 2025.03.19 |
|---|---|
| [Java 문법] 불변 객체(Immutable Object)란? ft. 가변 객체 (0) | 2025.03.18 |
| [Java 문법] Overloading VS Overriding (1) | 2025.02.23 |
| [Java 문법] enum(enumerated type) (0) | 2025.02.14 |
| [Java 문법] String.valueOf() VS toString() (0) | 2025.01.18 |