새소식

Java/Java

java - BufferedReader와 BufferedWriter

  • -

BufferedReader

사용이유

  • 많은 양의 데이터를 입력 받을 경우 효율적인 면에서 Scanner보다 훨씬 낫다. (빠른 작업속도)

사용법

BufferedReader bf =new BufferedReader(new InputStreamReader(System.in); // 선언

String str = bf.readLine(); // String
int i = Integer.parseInt(bf.readLine()); // int
  • readLine()은 리턴값을 String으로 고정하기 때문에 다른 타입을 입력하려면 형변환을 해주어야 한다.
  • 예외처리를 해주어야한다. throws IOXeception

Read한 데이터 가공

// StringTokenizer 인자값에 입력 문자열 넣음
StringTokenizer str = new StringTokenizer(s);

int num1 = Integer.parseInt(sc.nextToken()); // 첫 번째 호출
int num2 = Integer.parseInt(sc.nextToken()); // 두 번째 호출

String array[] = s.split(" "); // 공백마다 데이터를 끊어서 배열에 넣음

첫 번째 가공 방법

  • StringTokenizer에 nextToken() 함수를 사용하여 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출

두 번째 가공 방법

  • String.split() 함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식

BufferedWrite

사용이유

  • 일반적으로는 System.out.println(""); 을 사용하지만 많은 양의 출력에서는 BufferedWrite를 활용하는것이 속도적인 측면에서 좋다.

BufferedWriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언

bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터를 모두 출력
bw.close(); // 스트림을 닫음
  • BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 반드시 flush() / close()를 호출해 뒤처리를 해야 함
  • 자동 개행 기능(줄바꿈)이 없어 \n으로 수동처리 해주어야 한다.

사용예시

백준 15552번 문제

image

  • 최대 1,000,000번의 A + B 계산식을 입,출력 받아야한다.
  • Scanner, System.out.println()으로 실행할 경우 처리 속도가 느려 시간초과가 되니 BufferedReader, BufferedWriter를 사용해야 함.
// BufferedReader를 사용하기 위한 import
import java.io.*;

// 한 줄에 A, B 두가지 함수를 모두 받아야 하므로 StringTokenizer를 사용하여 한 줄에 입력 받은 후 공백을 기준으로 나눠 저장해야 함.
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {

//BufferedReader 선언
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedWriter 선언
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

// StringTokenizer 선언
        StringTokenizer st;

        for(int i = 0; i < T; i++) {

            st = new StringTokenizer(br.readLine(), " ");         // StringTokenizer로 입력 받은 후

            int A = Integer.parseInt(st.nextToken()); // 나눠서 저장
            int B = Integer.parseInt(st.nextToken());

            bw.write(A + B + "\n"); // bw는 자동 개행 기능이 없기 때문에 \n을 사용해 수동 줄바꿈을 해주어야 함.
        }
        bw.flush(); // 남은 모든 값을 출력
        bw.close(); // bw 종료
    }
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.