0️⃣사용 시 주의사항
(1) 클래스를 import해주어야 한다.
import java.io.IOException;
(2) main 클래스 옆에 throws IOException를 작성한다.
public static void main(String[] args) throws IOException {}
1️⃣BufferedReader의 특징
- 사용자가 요청할 때마다 데이터를 읽어 오는 것이 아닌 일정한 크기의 데이터를 한번에 읽어와 Buffer에 보관,
사용자의 요청이 있을 때 버퍼에서 데이터를 읽어오는 방식 - 대량의 입력 값에 대해 속도가 향상되고 시간 부하가 적다는 장점을 가진다.
- 라인 단위로 입력값의 경계를 인식하기 때문에 공백의 경우에도 String으로 인식한다.
- 입력받은 데이터 타입이 String타입이므로 다른 데이터 타입으로 사용할 경우 형변환이 필요하다.
2️⃣BufferedReader 사용법
- 데이터 라인 단위로 읽기 가능
- Enter만으로 경계를 인식한다.
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. 입력된 문자열 전체 읽어오기 (공백포함 한줄)
String s = br.readLine();
// 2. 입력된 값을 바로 숫자로 변환하기
int num = Integer.parseInt(br.readLine());
// 3. StringTokenizer 사용해보기
StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken()); // 첫번째 호출
int b = Integer.parseInt(st.nextToken()); // 두번째 호출
// 공백 구분 방법 2
String array [] = s.split(" "); // 공백마다 데이터 끊어서 배열에 넣음
br.close(); // 사용이 끝나면 닫아주기
}
}
3️⃣Scanner vs BufferedReader + StringTokenizer
💡큰 입력값에 대해서는 유의미한 차이를 보이기 때문에 학습해 두었다가 필요한 경우 사용해 보도록 하자!
1️⃣BufferedWriter 특징
- 데이터를 8KB 버퍼에 모았다가 한꺼번에 출력해 시스템 호출을 줄이고 속도를 높입니다.
- newLine()으로 플랫폼에 맞는 줄바꿈(Windows \r\n, Unix \n)을 손쉽게 삽입
- 버퍼가 가득 차거나 flush()를 호출할 때만 실제 출력이 발생
- close() 호출 시 내부적으로 flush()가 자동 수행되어 남은 데이터를 모두 출력
- 내부 메서드에 synchronized가 적용되어 있지 않으므로, 멀티스레드 환경에서는 외부에서 동기화 필요
2️⃣BufferedWriter 사용법
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언
String s = "abcdefg"; //출력할 문자열
bw.write(s); //출력
bw.newLine(); //줄바꿈
bw.flush(); //남아있는 데이터를 모두 출력시킴 이때 "abcdefg\n" 출력 됨
bw.close(); //스트림을 닫음
💡write()를 한다고 값이 출력되는 것이 아니라 flush() 를 통해 데이터를 출력 시켜주어야 한다!
3️⃣ Print vs BufferedWriter
조건: 10만 줄(100,000줄)에 "Hello\n" 출력
환경: OpenJDK 17, Windows/Linux 공통
- System.out.println
- 소요 시간: 약 450ms
- BufferedWriter + newLine()
- 소요 시간: 약 60ms
→ 약 7배 정도 빠르게 동작
BufferedWriter 역시 대량의 출력에서 성능상의 이점을 가지기 때문에 학습해 둡시다!
💡함께 학습하면 좋은 글 (StringTokenizer)
[Java] StringTokenizer 란?
1️⃣StringTokenizer이란문자열을 구분자를 이용하여 분리할 때 사용한다.공백 혹은 컴마를 기준으로 문자열을 분리하고 싶을 때, 아니면 특정 문자열을 나누고 싶을 때 StringTokenizer을 사용한다.주
devoks.tistory.com
'Backend > Java' 카테고리의 다른 글
[Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까? (1) | 2025.07.10 |
---|---|
[Java] StringTokenizer 란? (0) | 2025.07.10 |
[Java] 정렬 알고리즘 정리 (1) | 2025.07.02 |
[EffectiveJava] Item 14. Comparable을 구현할지 고려하라 (1) | 2025.07.01 |
[EffectiveJava] Item 55. 옵셔널 반환은 신중히 하라 (1) | 2025.07.01 |