[JAVA] BufferedReader와 BufferedWriter

2025. 4. 30. 15:10·공부/JAVA

JAVA에서 빠르고 효율적인 입출력을 하기 위한 클래스.

알고리즘 문제나 대용량 데이터를 처리할 때 자주 사용된다.

 

 

1) BufferedReader의 특징

Scanner 보다 입력이 빠르다.

한 줄 단위로 문자열을 읽는다. (readLine())

숫자로 바꾸려면 직접 Integer.parsInt() 사용해야 한다.

입력이 많을 때 사용.

항상 IOException 예외 처리 (throws 또는 try-catch)를 해줘야 한다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String line = br.readLine();  // 한 줄 읽기 (문자열)
        int num = Integer.parseInt(line);  // 정수로 변환

        System.out.println("입력된 숫자: " + num);
    }
}

 

 

2) BufferedWriter의 특징

System.out.print 보다 출력이 빠르다.

write()는 줄바꿈이 포함되지 않으므려, newLine()을 함께 써야 한다.

마지막에 flush() 또는 close()를 해줘야 실제로 출력이 나간다.

출력이 많을 때 사용(반복 출력 등)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        bw.write("Hello, World!");
        bw.newLine();  // 줄바꿈
        bw.write("출력 끝!");
        bw.flush();  // 출력 버퍼 비우기 (필수)
    }
}

 

 

예시) 

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));

        int T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            String[] input = br.readLine().split(" ");
            int A = Integer.parseInt(input[0]);
            int B = Integer.parseInt(input[1]);
            bw.write((A + B) + "\n");
        }
        bw.flush();  // 반드시 출력!
        bw.close();  // 리소스 정리
        br.close();
    }
}

** br.close() 꼭 해주지 않아도 된다. 권장임

그러나 닫아주면 메모리 관리가 깔끔해지고, 다른 InputStream에서도 재사용이나 충돌 방지에 도움이 되기 때문에 되도록이면 닫는 습관 들이는 게 좋다.

 

** Scanner와 BufferdReader

Scanner는 간편하고 직관적. 토큰으로 입력 받는다.

nextInt(), next(), nextLine() 같은 메서드를 제공해서, 입력값이 숫자이든 문자열이든 알아서 적절하게 처리해줌.

내부적으로 작동하는 방식이 느린 편이어서 입력이 많을 경우 성능에 문제가 생길 수 있다.

 

BufferdReader는 기본적으로 문자열 한 줄 단위로 입력을 받음.

readLine() 메서드를 사용해서 입력을 한 줄 통째로 받아오고, 그 안에서 필요한 데이터를 직접 쪼개고 변환.

 

 

** System.out.print 와 BufferedWriter

System.out.print 는 출력을 할 때마다 바로 바로 콘솔에 전달하기 때문에 출력 속도가 느리가.

그렇기 때문에 대용량 데이터 출력엔 부적합.

이때 BufferedWriter를 사용하는데 버퍼(임시 메모리 공간)에 출력할 내용을 모아두었다가 한꺼번에 출력한다. 그렇기 때문에 빠르고 효율적이다. flush()나 close()가 필요하다.

BufferedWriter는 write() 메서드를 사용하고 자동 줄바꿈이 없기 때문에 \n이나 newLine() 메서드를 사용해야 한다. 

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'공부 > JAVA' 카테고리의 다른 글

[JAVA] 중복을 허용하지 않는 HashSet  (0) 2025.05.14
[JAVA] 문자열 쪼개기 StringTokenizer  (0) 2025.05.01
[JAVA] 문자열 비교 equals()  (0) 2025.04.08
[Java] 특정 문자 인덱스, 배열 인덱스를 찾는 indexOf()  (0) 2025.02.23
[JAVA] ArrayList  (0) 2025.02.08
'공부/JAVA' 카테고리의 다른 글
  • [JAVA] 중복을 허용하지 않는 HashSet
  • [JAVA] 문자열 쪼개기 StringTokenizer
  • [JAVA] 문자열 비교 equals()
  • [Java] 특정 문자 인덱스, 배열 인덱스를 찾는 indexOf()
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    코테
    springbot
    CS50
    코딩테스트_입문
    오라클에러
    업무자동화
    부스트코스
    ORACLE에러
    lombok
    에러
    Java
    알고리즘
    책첵개발일지
    부스트코스강의
    git명령어
    데이터연동
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[JAVA] BufferedReader와 BufferedWriter
상단으로

티스토리툴바