[Java] BufferedReader, BufferedWriter 란?

2025. 7. 10. 17:13·Backend/Java

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 사용법

💡 readLine()
  • 데이터 라인 단위로 읽기 가능
  • 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
'Backend/Java' 카테고리의 다른 글
  • [Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까?
  • [Java] StringTokenizer 란?
  • [Java] 정렬 알고리즘 정리
  • [EffectiveJava] Item 14. Comparable을 구현할지 고려하라
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (18) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (79)
        • Programmers (79)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    codingtest
    programmers
    StringTokenizer
    BufferedWriter
    json
    switch
    effectivejava
    CS
    BufferedReader
    java
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[Java] BufferedReader, BufferedWriter 란?
상단으로

티스토리툴바