[Java - BufferedReader/BufferedWriter]

린린린·2025년 7월 17일

📥BufferedReader(입력용)                                                   

✅ 목적:
문자 스트림 입력을 빠르게 처리하기 위해 사용
InputStreamReader와 함께 사용해 콘솔이나 파일에서 텍스트를 읽음

✅ 주요 특징:
버퍼(메모리 공간)를 사용해 한 줄 또는 여러 문자를 한 번에 읽음
Scanner보다 속도가 빠름 (특히 반복 입력 받을 때)
주로 readLine()으로 한 줄 단위 읽기

✅ 기본 사용 예:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine(); // 한 줄 읽기

📤BufferedWriter(출력용)                                                     

✅ 목적:
문자 스트림 출력을 효율적으로 처리하기 위해 사용
OutputStreamWriter와 함께 사용해 콘솔이나 파일로 출력

✅ 주요 특징:
출력할 데이터를 버퍼에 모아 두었다가 flush() 또는 close() 시 한꺼번에 출력
줄바꿈은 newLine() 메서드 사용
출력이 많은 경우 성능 향상

✅ 기본 사용 예:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("출력 테스트");
bw.newLine();
bw.flush(); // 출력 강제 실행

📊Scanner vs BufferedReader                                                 

Scanner : 간편한 입력/속도 느림/ 파싱기능 존재 nextInt(), nextLine() 등
BufferedReader : 빠르고 효율적인 입력/ 속도 빠름/ 파싱기능 없음(StringTokenizer 사용 필요)

→ Scanner는 간단한 입력시 BufferedReader는 입력이 많고 빠른 처리가 필요할 시 사용하면 굿뜨

💡번외                                                                                

flush와 close의 사용법

BufferedWriter.flush()는 출력 버퍼에 남아 있는 내용을 강제로 출력하는 역할

✅ flush()는 언제 필요한가?

  1. 출력 내용을 즉시 보여줘야 할 때
    예: 사용자에게 출력 결과를 바로 보여줘야 하는 콘솔 프로그램
    bw.write("입력하세요: ");
    bw.flush(); // 사용자 입력 기다리기 전에 바로 출력
  1. 출력을 마무리하기 전에 중간 출력이 필요한 경우
    예: 큰 루프 돌면서 중간중간 출력할 때
    for (int i = 0; i < 10; i++) {
      bw.write("현재 i: " + i);
      bw.newLine();
      bw.flush(); // 즉시 출력
    }
                       

❌ 안 써도 되는 경우
1. bw.close()를 호출하면 자동으로 flush됨

bw.write("Hello");
bw.close(); // 내부적으로 flush() 자동 호출

→ 즉시 결과를 보여주거나, 반복 중간에 출력하거나, 디버깅이 필요한 순간엔 flush()를 사용


이 글에서는 백준 문제 풀이 과정에서 사용한 주요 기술과 알고리즘을 설명합니다.

  • 효율적인 입력/출력 처리

실제 문제 풀이 코드는 아래 깃허브 저장소에서 확인하실 수 있습니다.

👉 깃허브 - 백준 문제 풀이 저장소

이 글과 코드를 보시고 개선할 부분이나 궁금한 점이 있으면 편하게 댓글이나 메시지로 알려주세요.
여러분의 피드백 덕분에 더 나은 콘텐츠를 만들 수 있습니다.
함께 성장해 나가요!

profile
개발은모르겠고일단기록

0개의 댓글