파일을 읽고 쓰거나 키보드, 네트워크 등 외부 입력/출력 장치와 데이터를 주고받는 자바 I/O(Input/Output) 스트림 구조를 다룹니다.
1. 입출력(I/O) 스트림 용어 사전 (Glossary)
- Stream (스트림): 단방향으로 데이터가 연속적으로 이동하는 가상의 통로입니다. (FIFO 구조)
- Byte Stream (바이트 스트림): 1byte 단위로 바이너리 데이터(이미지, 동영상, 음악 파일 등)를 입출력하는 스트림입니다. (
InputStream,OutputStream) - Character Stream (문자 스트림): 2byte(유니코드) 단위로 텍스트 문서 데이터만 전용으로 다루는 스트림입니다. (
Reader,Writer) - Buffered Stream (버퍼 스트림): 입출력 횟수를 줄이기 위해 메모리 버퍼(Buffer)를 경유시켜 입출력 성능을 10배 이상 향상시키는 보조 스트림입니다. (
BufferedReader,BufferedWriter)
2. BufferedReader를 활용한 텍스트 파일 읽기 실습
import java.io.*;
public class FileReadExample {
public static void main(String[] args) {
File file = new File("sample.txt");
// try-with-resources 구문을 활용하여 자동으로 스트림 close() 수행
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
System.out.println("--- [파일 내용 출력] ---");
while ((line = br.readLine()) != null) { // 한 줄씩 읽기
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("에러: 읽고자 하는 파일이 존재하지 않습니다.");
} catch (IOException e) {
System.err.println("파일 읽기 중 입출력 오류가 발생했습니다: " + e.getMessage());
}
}
}
3. 자주 묻는 질문 (Q&A)
Q. Scanner와 BufferedReader 중 어느 것이 입력 속도가 빠른가요?
A. BufferedReader가 훨씬 빠릅니다. Scanner는 정규식을 이용해 형변환 파싱을 수행하므로 느리지만, BufferedReader는 8KB 가량의 대용량 버퍼로 한 번에 읽어오므로 대용량 파일 입출력 시 압도적으로 유리합니다.