BufferedReader와 StringTokenizer는 Java에서 입력을 빠르고 효율적으로 처리하는 도구이다.
특히 많은 데이터를 입력받을 때 Scanner보다 더 빠르게 처리 가능
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
// BufferedReader 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 한 줄 입력 받기
String input = br.readLine();
System.out.println("입력값: " + input);
}
}
📌 BufferedReader 특징
✅ 빠름 → Scanner보다 성능이 좋음
✅ 한 줄 단위로 입력받음 (readLine())
✅ 공백 포함된 문자열도 입력 가능
❌ 숫자로 변환하려면 Integer.parseInt() 등을 사용해야 함
❌ 공백을 기준으로 여러 개의 값을 입력받기 어려움 → 그래서 StringTokenizer를 함께 사용
📌 예제: 여러 개의 숫자 입력받기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BufferedReaderStringTokenizer {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("공백으로 구분된 숫자를 입력하세요:");
StringTokenizer st = new StringTokenizer(br.readLine());
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
System.out.println("입력된 숫자: " + num);
}
}
}
Result)
공백으로 구분된 숫자를 입력하세요:
5 10 15 20
입력된 숫자: 5
입력된 숫자: 10
입력된 숫자: 15
입력된 숫자: 20
| 비교 항목 | Scanner | BufferedReader + StringTokenizer |
|---|---|---|
| 입력 속도 | 느림 (nextInt() 등 메서드 호출 시 내부에서 추가적인 파싱이 발생) | 빠름 (readLine()으로 한 번에 입력받고 StringTokenizer로 분리) |
| 입력 방식 | 한 번에 하나씩 입력 (next(), nextInt() 등) | 한 줄 전체 입력 후 분리 (readLine() + StringTokenizer) |
| 공백 포함 문자열 | nextLine() 사용 필요 | readLine()으로 쉽게 처리 가능 |
| 정수 입력 | nextInt() 사용 가능 | Integer.parseInt(st.nextToken()) 사용해야 함 |
| 입력 종료 감지 | hasNext() 메서드 지원 | st.hasMoreTokens() 사용 |
| 사용 편의성 | 직관적이고 간편함 | 변환 과정 필요하지만 대량 입력에 유리 |
| 적합한 상황 | 입력 데이터가 많지 않을 때 | 대량의 데이터 입력이 필요할 때 |
Scanner → 간단한 입력 처리 시 사용하기 좋음.BufferedReader + StringTokenizer → 빠른 입력이 필요할 때 (예: 백준, 프로그래밍 대회 등).