[Java] 빠른 입출력 BufferedReader & BufferedWriter

2024. 6. 19. 17:07·Java

BufferedReader, BufferedWriter는 Buffer(버퍼)를  사용하여 읽기와 쓰기를 하는 함수이다.

 

Scanner, System.out.println() 대신에 사용한다.

 

아래와 같이 버퍼를 사용하면 키보드의 입력값을 버퍼에 한번에 모았다가 버퍼의 내용을 한번에 프로그램에 전달한다.

 

 

하드디스크의 속도가 느리고, 외부 장치(키보드, 모니터)와 데이터 입출력도 시간이 오래 걸린다.

그렇기 때문에 입력이 있을 때마다 데이터를 이동시키는 것보다, 중간에 버퍼를 두어 모아두었다가 한번에 보내는 것이 더 효율적이고 빠르다.

 

 

 

☑️ BufferedReader

  • 버퍼를 이용한 입력 함수
  • Enter(줄바꿈)만 경계로 인식한다.
  • 리턴값이 String으로 고정되기 때문에 다른 타입으로 입력받으려면 형변환이 필요하다.
  • readline()사용 시마다 예외처리를 반드시 해주어야 한다. → throws IOException
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   //BufferedReader 선언

String s = br.readLine();   //String
int i = Integer.parseInt(br.readLine());    //Int -> Int형으로 입력받기 위해서 형변환

 

 

데이터 가공

Scanner를 통해 읽어온 데이터는 Space(공백), Enter(줄바꿈) 모두를 경계로 입력값을 인식하는 반면, 

BufferedReader를 통해 읽어온 데이터는 Enter(줄바꿈) 단위로만 나누어진다.

이것을 Space(띄어쓰기) 단위로 데이터를 가공하기 위해서는 따로 작업해주어야 한다. 

이 때, StringTokenizer 클래스를 사용하는 방법, split() 함수를 사용하는 방법이 있다.

//1번째 방법) StringTokenizer 사용
//StringTokenizer의 nextToken()를 사용해서 br.readline()으로 입력받은 값을 공백 단위로 구분
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   //BufferedReader 선언
StringTokenizer st = new StringTokenizer(br.readLine());    //StringTokenizer 인자값에 입력 문자열 넣음

int a = Integer.parseInt(st.nextToken());   //첫번째 호출
int b = Integer.parseInt(st.nextToken());   //두번째 호출



//2번째 방법) String.split() 사용
//string을 한번에 받아서 split() 함수를 사용해서 배열로 변환
String s = br.readLine();
String array[] = s.split(" ");   //데이터를 공백단위로 끊어서 배열에 넣음

 

 

 

 

 

☑️ BufferedWriter

  • 버퍼를 이용한 출력 함수
  • BufferedWriter의 경우 사용 버퍼를 잡아 놓았기 때문에 사용한 후에 반드시 flush() / close()를 호출해주어야 한다.
  • BufferedWriter는 System.out.println(); 과 같이 자동 개행 기능이 없기 때문에 newLine() 또는 bw.write("\n") 를 사용한다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));	//BufferedWriter 선언

String s = br.readLine();   //출력할 문자열

bw.write(s);    //출력
bw.newLine();   //줄바꿈 -> 또는 bw.write("\n") 사용
bw.flush(); //남아있는 데이터를 모두 출력
bw.close(); //스트림을 모두 닫음

 

 

 

 

 

 

예시 Example

백준 15552번 : 빠른 A+B

https://www.acmicpc.net/problem/15552

import java.io.*;
import java.util.StringTokenizer;

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

        int t = Integer.parseInt(br.readLine());

        for (int i = 0; i < t; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            bw.write((a + b) + "\n");
        }

        bw.flush();
        bw.close();
    }
}

 


[참고 블로그]

https://coding-factory.tistory.com/251

 

[Java] BufferedReader, BufferedWriter를 활용한 빠른 입출력

BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스입니다. 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로

coding-factory.tistory.com

 

https://rlakuku-program.tistory.com/33

 

[Java] 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder

BufferedReader / BufferedWriter BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은, 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달된다.

rlakuku-program.tistory.com

 

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

'Java' 카테고리의 다른 글

[Java] 2차원 배열 오름차순, 내림차순 정렬  (0) 2025.01.09
[Java] 오버로딩과 오버라이딩(Overloading & Overriding)  (0) 2024.09.10
[Java] 자바 Queue에 x, y 값 두 개 삽입(Pair 클래스, Point 클래스)  (0) 2024.08.23
[Java] JDK 버전 여러 개 전환하며 사용하기  (0) 2024.05.13
[Java] Math 클래스  (0) 2024.04.17
'Java' 카테고리의 다른 글
  • [Java] 오버로딩과 오버라이딩(Overloading & Overriding)
  • [Java] 자바 Queue에 x, y 값 두 개 삽입(Pair 클래스, Point 클래스)
  • [Java] JDK 버전 여러 개 전환하며 사용하기
  • [Java] Math 클래스
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (69)
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (51)
        • 백준 (11)
        • 프로그래머스 (0)
        • SQL (9)
        • 이코테 (31)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[Java] 빠른 입출력 BufferedReader & BufferedWriter
상단으로

티스토리툴바