ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Scanner vs BufferedReader
    Java 2018. 8. 9. 00:51
    반응형

    자바를 입력하는데 Scanner 와 BufferedReader 를 사용하는데...

    이 둘의 차이를 정확히 자세히 모르겠당..

    그래서 정리!!







    1. Scanner : 정규 표현을 사용해 원시적 형태 및 라인을 구문 분석할 수 있는 간단한 텍스트 스캐너입니다.


      1) java.util 패키지 내에 위치하고 있습니다.

    1
    2
    3
    import java.util.Scanner;
     
    Scanner scanner = new Scanner(System.in);
    cs

      2) 버퍼의 사이즈가 1024byte (1KB)입니다.


      3) 데이터를 파싱해서 원하는 type으로 가져옵니다.


      4) I/O Exception을 던지지 않습니다.


      5) thread unsafe 합니다. 

         - 두 스레드에서 동일한 Scanner 인스턴스를 사용하는 경우 객체에 대한 액세스를 동기화하지 않으면 문제가 발생할 수 있습니다.






    2. BufferedReader : 행을 효율적으로 읽을 수 있도록 문자를 버퍼링하여 문자 입력 스트림에서 텍스트를 읽습니다.


      1) java.io 패키지 내에 위치하고 있습니다.

         * InputStreamReader 는 문자 기반의 보조 스트림으로써 바이트 기반 스트림을 문자 기반 스트림으로 연결시켜 주는 역할을 합니다.

           BufferedReader 와 System.in을 연결하기 위해 InputStreamReader를 사용하였습니다. 

    1
    2
    3
    4
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
     
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    cs

      2) 버퍼의 사이즈가 8192byte (8KB)입니다.

          - 버퍼를 이용해서 입출력의 효율을 높일 수 있도록 합니다.


      3) 데이터를 파싱하지 않은 채 가져옵니다.

         - String 으로만 읽고 저장합니다.


      4) I/O Exception을 던집니다.

         - IOException을 throw 하거나 try/catch 해야합니다.

    1
    2
    3
    4
    5
    6
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try {
        String a = br.readLine();
    catch (IOException e) {
        e.printStackTrace();
    }
    cs

      5) thread safe 합니다. 






    3. 결론!!! Scanner 와 BufferedReader 의 차이점

      1) Scanner 와 BufferedReader의 버퍼 사이즈가 각각 1KB, 8KB로 차이가 많이 납니다.

         그렇기 때문에 많은 입력이 있다고 한다면 BufferedReader가 좋습니다.

         실제로는 구문 분석 하려면 Scanner 사용하고, 구문을 한 줄씩 읽으려면 BufferedReader 사용한다고 합니다. ( * 주변 피셜.. ) 


      2) BufferedReader는 String으로만 읽고 저장하지만 Scanner는 다른 타입으로 파싱할 수 있습니다.


      3) Scanner 는 Thread-safe하지 않기때문에 동일한 인스턴스 변수를 가지고 멀티 쓰레드에 사용할 수 없습니다.

    반응형
Designed by Tistory.