ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BufferedReader 사용하기
    Programming/Java 2018. 11. 9. 17:01
    BufferedReader

    BufferedReader

    • 자바에서 사용되는 입력 받는 방법에 대해서 알아보자. 알고리즘을 풀 때 Scanner를 사용하면 입력이 느린경우가 있다. 최적하를 위해서 어떤 방법이 있는지 알아보자.

    Scanner

    자바에서 가장 흔하게 입력받는 방법이다. nextInt()의 경우 개행문자를 받지 않기 때문에 입력받을 때 신경써주어야 한다.

     

    BufferedReader

    BufferedReader의 사용법이다. 기본적으로 스트링값으로 받아오기 때문에 원시형의 변형이 필요하다.

     

    StringTokenizner

    Scanner를 사용하면 nextInt()를 이용해서 공백으로 구분된 int를 가져올 수 있지만 BufferedReader는 불가능 하기 때문에 Tokenizer를 통해서 delimiter를 설정해 주어야 한다.

    생성자의 첫번째 매개변수는 String값이다. 두번째는 delimiter인데 기본의 공백으로 주어져있기 때문에 공백 문자열을 받아오려면 매개변수 하나만 보내면된다. 구분된 문자열은 nextToken()함수로 불러올 수 있다. 역시 스트링값을 반환하기 때문에 알맞은 원시형으로 변환해 주어야 한다.

    hasMoreToken() 메소들를 활용하면, while문을 통해 문자토큰이 끝날 때 까지 반복문을 작성할 수 있다.

     

    BufferedWriter

    BufferedReader와 비슷하다. System.out.println()과는 다르게 개행되지 않기때문에 개행하고 싶다면 \n을 마지막에 넣어주면 된다.

     

     

    flush()는 스트림에 남아있을 수 있는 문자를 빼는 역할을 한다. bw는 다 사용했다면 꼭 close()를 하도록 하자.

     

    차이점

    1. Scanner의 버퍼크기는 1024 chars이고 BufferReader의 크기는 8192 chars 이다.
    2. BufferedReader는 문자열을 단순히 읽고, Scanner는 구분하는 메소드가 정의 되어 있다.
    3. BufferReader는 동기화가 된다.
    4. BufferedReader는 IOException 예외를 던진다.

    참조 : 마이구미 블로그

     

    • 스캐너가 비교적 나중에 나온 것이기 때문에 다양한 메소드가 있지만, 느리다.
    • 큰 파일을 읽을 때는 BufferedReader가 좋다.
    • Scanner는 StringTokenizer 대신 userDelimiter를 사용할 수 있다.
    • BufferedReader는 예외를 던지기 때문에 처리해 주어야한다.

    성능차이를 알아보자

    BufferedReader에 매개변수로 들어가는 InpuStreamReader는 문자열을 Chracter 단위(한글자)로 읽어 들어온다. 때문에 긴 문자열을 읽어 들일 때 불편하다.

    BufferedReader는 버퍼를 사용하여 이러한 불편함을 제거한다. 요청이 있을때 마다 읽어오는 것이 아니라, 한번에 버퍼에 저장한후 요청이 있으면 버퍼에서 읽어오는 방식이다. 공백도 문자열로 인식하여 받는다.

    반면 Scanner는 공백과 줄바꿈을 모두 입력의 경계로 인식한다. 때문에 데이터를 쉽게 입력받을 수 있다. 또한 데이터 타입이 입력 받는 시점에서 결정되기 때문에 Casting이 필요하지 않는다.(함수 사용)

     

    상황에 맞게 사용하면 되겠다.!

    'Programming > Java' 카테고리의 다른 글

    객체지향 생활 체조  (0) 2018.09.13
    BufferedReader와 StringTokenizer를 사용해보자  (1) 2018.05.18
Designed by Tistory.