TIL 9 : BufferedReader, BufferedWriter
Timeline
09:00 ~ 09:30 : 데일리 스크럼
09:30 ~ 12:00 : 백준 문제(1~2단계 완료)
12:00 ~ 13:00 : 점심 시간
13:00 ~ 14:00 : 개인 학습
14:00 ~ 15:00 : Java에서의 객체 활용
15:00 ~ 18:00 : 계산기 레벨1 진행, 백준 문제(3단계 완료)
18:00 ~ 19:00 : 저녁 시간
19:00 ~ 21:00 : 개인 학습
백준 1~3단계 문제 풀기 완료
1단계 : 입출력과 사칙연산
2단계 : 조건문
3단계 : 반복문
킹 받았던 문제
https://www.acmicpc.net/problem/25314
내가 작성한 코드 계속 틀렸다고 하는데 이해가 안간다... 왜 안되는데~~
그냥 다른 사람이 작성한 코드로 통과시켜버림 ㅡㅡ;
내가 짜본 코드 ㅠ
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
for(int i=0; i<count/4; i++){
System.out.print("Long ");
}
System.out.println("int");
}
}
백준 문제 https://www.acmicpc.net/problem/15552 풀려면 BufferedReader, BufferedWriter 알아야 한다고 한다 -_-;;
✅ BufferedReader & BufferedWriter 쉽게 이해하기
✔ BufferedReader와 BufferedWriter는 “입출력 속도를 빠르게 하기 위한” 클래스.
✔ 기본적인 Scanner나 System.out.println()보다 더 빠르게 동작.
✔ BufferedReader와 BufferedWriter는 “버퍼(Buffer)“를 사용하여 데이터를 한 번에 읽고/쓰는 방식
✔ 반면, Scanner는 입력값을 한 글자씩 읽으면서 데이터 타입(int, double)을 자동 변환해야 해서 속도가 느림.
✔ 즉, BufferedReader는 한 번에 데이터를 많이 읽고, BufferedWriter는 한 번에 데이터를 많이 출력해서 속도가 빠름.
📌 성능 비교 테스트 (실제 실행 속도 차이)
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
int N = 1000000; // 테스트 데이터 개수
// ✅ Scanner 성능 테스트
long start1 = System.currentTimeMillis();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < N; i++) {
int num = scanner.nextInt();
}
long end1 = System.currentTimeMillis();
System.out.println("Scanner 실행 시간: " + (end1 - start1) + "ms");
// ✅ BufferedReader 성능 테스트
long start2 = System.currentTimeMillis();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(br.readLine());
}
long end2 = System.currentTimeMillis();
System.out.println("BufferedReader 실행 시간: " + (end2 - start2) + "ms");
}
}
Scanner 실행 시간: 2000ms (2초)
BufferedReader 실행 시간: 300ms (0.3초)
✔ 특히 “많은 데이터를 입력/출력할 때” 효과적임.
✔ BufferedReader와 BufferedWriter는 기본적으로 String 타입만 다룰 수 있음
✔ 즉, 숫자(int, double 등)를 입력받거나 출력하려면 String으로 변환 필요.
📌 BufferedReader로 숫자를 입력받으려면 Integer.parseInt() 같은 변환이 필요하고, BufferedWriter로 숫자를 출력하려면 String.valueOf()를 사용
1. BufferedReader란?
✅ 입력을 빠르게 받아들이는 기능!
✅ Scanner보다 빠르게 한 줄(\n 기준)씩 읽을 수 있음.
✅ readLine()을 사용하여 한 줄 전체를 가져옴!
🔹 BufferedReader 사용 예제
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("입력하세요:");
String input = br.readLine(); // ✅ 한 줄 입력 받기 (개행 포함)
System.out.println("입력된 값: " + input);
}
}
2. BufferedWriter란?
✅ 출력을 빠르게 하는 기능! (System.out.println()보다 속도가 빠름)
✅ write() 메서드로 출력하고, flush()를 호출해야 실제 출력됨.
✅ 출력을 한 번에 처리하여 성능을 향상시킬 수 있음.
📌 BufferedWriter를 사용하면 버퍼에 출력값을 모았다가 한 번에 출력해서 속도를 높일 수 있음.
🔹 BufferedWriter 사용 예제
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello, BufferedWriter!"); // ✅ 버퍼에 저장
bw.newLine(); // ✅ 줄 바꿈 추가
bw.write("이렇게 출력 속도를 높일 수 있어!");
bw.flush(); // ✅ 출력 강제 실행
bw.close(); // ✅ 스트림 닫기
}
}
3. BufferedReader + BufferedWriter 함께 사용하기
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
System.out.println("이름을 입력하세요:");
String name = br.readLine(); // ✅ 입력 받기
bw.write("입력된 이름: " + name); // ✅ 출력 버퍼에 저장
bw.newLine(); // ✅ 줄 바꿈 추가
bw.flush(); // ✅ 출력 실행
bw.close(); // ✅ 스트림 닫기
}
}
📌 BufferedReader는 속도가 빠르고, 많은 데이터를 다룰 때 유리
📌 하지만 Scanner는 형 변환이 쉬워서 간단한 입력을 받을 때 더 편리