공부하는 안경딸기

[Java] BufferedReader/BufferedWriter 사용기 본문

프로그래밍언어/JAVA

[Java] BufferedReader/BufferedWriter 사용기

안경딸기 2021. 8. 19. 21:34

좋다(?)는걸 알고는 있었지만 배우기가 귀찮아서 미루다가 코테 공부 시작하면서 적어보는 BufferedReader 사용하기

BufferedReader

BufferedReader 공식 문서

 

문자 입력 스트림

 

Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.

문자 입력 스트림에서 텍스트를 읽고 문자, 배열 및 행을 효율적으로 읽을 수 있도록 문자를 버퍼링합니다.

 

The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

버퍼 크기를 지정하거나 기본 크기를 사용할 수 있습니다. 기본값은 대부분의 목적에 충분히 큽니다.

사용해 보니깐...!

입력 값은 무조건 String 타입이라 타입 변환이 꼭 필요하고 Exception 처리도 꼭 필요

이점에서 Scanner 보다는 확실히 좀 귀찮다는게 느껴짐

그리고 라인 단위로 입력을 받기 때문에 한 줄에 여러 값이 입력된다면 파싱(StringTokenizer)이 필수

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;

        int sum = 0;
        int[] array = new int[2];
        st = new StringTokenizer(bufferedReader.readLine(), " ");
        for(int i = 0; i < array.length; i++){
            array[i] = Integer.parseInt(st.nextToken());
            sum += array[i];
        }
        System.out.println(sum);
    }
}

Scanner

Scanner 공식 문서

 

A simple text scanner which can parse primitive types and strings using regular expressions.

정규식을 사용하여 기본 유형 및 문자열을 구문 분석할 수 있는 간단한 텍스트 스캐너입니다.

 

AScannerbreaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the variousnextmethods.

스캐너는 기본적으로 공백과 일치하는 구분 기호 패턴을 사용하여 입력을 토큰으로 나눕니다. 결과 토큰은 다음 다양한 방법을 사용하여 다른 유형의 값으로 변환될 수 있습니다.

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        int num2 = input.nextInt();

        int sum = num1 + num2;

        System.out.println(sum);
    }
}

BufferedWriter

BufferedWriter 공식 문서

 

Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.

단일 문자, 배열 및 문자열을 효율적으로 쓸 수 있도록 문자를 버퍼링하여 문자 출력 스트림에 텍스트를 씁니다.

 

The buffer size may be specified, or the default size may be accepted. The default is large enough for most purposes.

버퍼 크기를 지정하거나 기본 크기를 사용할 수 있습니다. 기본값은 대부분의 목적에 충분히 큽니다.

 

BufferedWriter의 경우 BufferedReader와 비교했을 때 버퍼를 잡아두기 때문에 flush(), close()를 반드시 호출하여 뒤처리를 해줘야 함. 또한 자동 개행이 없기 때문에 필요하다면 "\n"를 따로 입력해 줘야 함

 

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int num = Integer.parseInt(bf.readLine());

        for(int i = 1; i < 10; i++){
            bw.write(num + " * " + i + " = " + (num * i) + "\n");
        }
        bw.flush(); //남아있는 데이터 모두 출력
        bw.close(); //스트림 닫음
    }
}

결론

가장 위에 있는게 BufferedReader를 사용한 결과! 시간면에서 엄청난 차이 발생

학교에서 과제하고 공부하면 그냥 Scanner , System.out.println 사용이 좋다.

그렇지만 코테를 한다? 빠른 속도, 적은 메모리가 필요하다? 그러면 BufferedReader, BufferedWriter 사용이 좋다.

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[Java] Java에서 Queue 사용하기  (0) 2021.09.05
Comments