Java BufferedReader 마스터하기: 효율적 캐릭터 스트림 처리
Java BufferedReader 클래스
BufferedReader 클래스가 실전 예제와 심층 메서드 설명으로 Java에서 I/O 성능을 향상시키는 방법을 알아봅니다.
java.io 패키지의 BufferedReader 클래스는 다른 Reader를 래핑하여 효율적인 문자 입력을 제공합니다. 데이터 청크를 내부 버퍼에 읽어들임으로써 비용이 많이 드는 디스크 I/O 연산을 최소화합니다.
BufferedReader 작동 원리
내부적으로 BufferedReader는 8,192자(기본 크기)의 버퍼를 유지합니다. 읽기 연산 중 소스 파일에서 문자 블록을 가져와 이 버퍼에 저장합니다. 이후 읽기는 버퍼에서 문자를 하나씩 가져오므로 디스크 접근 횟수가 크게 줄어들고 I/O가 빨라집니다.
BufferedReader 생성하기
BufferedReader를 사용하려면 java.io에서 임포트하고 FileReader 같은 다른 Reader 구현체를 래핑합니다:
import java.io.FileReader;
import java.io.BufferedReader;
FileReader file = new FileReader("example.txt");
BufferedReader reader = new BufferedReader(file);
커스텀 버퍼 크기도 지정할 수 있습니다:
BufferedReader reader = new BufferedReader(file, 16384); // 16KB 버퍼
BufferedReader의 핵심 메서드
read()
int read() - 버퍼에서 단일 문자를 읽습니다.
int read(char[] cbuf) - 제공된 배열에 문자를 읽습니다.
int read(char[] cbuf, int off, int len) - off 오프셋부터 배열에 최대 len 문자를 읽습니다.
예제: input.txt의 전체 콘텐츠를 문자 배열로 읽기:
import java.io.FileReader;
import java.io.BufferedReader;
class Main {
public static void main(String[] args) {
char[] buffer = new char[100];
try (FileReader file = new FileReader("input.txt");
BufferedReader reader = new BufferedReader(file)) {
reader.read(buffer);
System.out.println("Data in the file:\n" + new String(buffer));
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과
Data in the file:
This is a line of text inside the file.
skip()
skip(long n) 메서드는 스트림에서 다음 n 문자를 버립니다:
reader.skip(5); // "This " 건너뛰기
건너뛴 후 남은 콘텐츠를 읽으면:
Data after skipping 5 characters: is a line of text inside the file.
close()
시스템 리소스를 해제하려면 항상 리더를 닫으세요:
reader.close();
기타 유용한 메서드
| 메서드 | 설명 |
ready() | 블로킹 없이 읽을 준비가 되었는지 확인합니다. |
mark(int readAheadLimit) | 스트림의 현재 위치를 표시합니다. |
reset() | 스트림을 가장 최근 표시 위치로 재설정합니다. |
완전한 레퍼런스는 공식 Java 문서를 참조하세요.