자바(JAVA) - Scanner & BufferedReader

유동우·2023년 4월 2일
0

자바 기본

목록 보기
1/4
post-thumbnail

Scanner와 BufferedReader

둘 다 사용자(키보드)로부터 입력을 받을 수 있는 기능을 제공.
내장된 함수들도 차이가 있지만 가장 큰 차이점은 속도이다.

Scanner

import java.util.Scanner;

public class Input {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String input = sc.nextLine();
    }
}

BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Input {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();
    }
}

평균적으로
BufferedReader의 속도: 0.6585
Scanner의 속도: 4.8448

Scanner는 1KB 크기의 버퍼를 갖고, BufferedReader 8KB 크기의 버퍼를 갖기 때문에 속도에서 차이가 발생한다.


기능적 차이점

Scanner: int, short, long, float, double, String 구분하여 읽음
BufferedReader: String

Scanner: Space, Enter 모두 경계로 입력값을 인식
BufferedReader: Enter만을 경계로 입력값을 인식

    //선언
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    //파일에서 입력받을 경우에는 new BufferedReader(new FileReader("ex.java"));
    
    //라인단위로 입력받기(Enter를 경계로)
    String str = bf.readLine();
    
    //정수형 입력이라면, 형변환 필수!
    int i = Integer.parseInt(bf.readLine());
    
    //Space를 경계로 끊어야 할 때
    String arr[] = str.split(" ");
    //또는 StringTokenizer 클래스 이용)

출력 및 예외처리

출력에 관해서도 System.out.println("")을 사용하지만, 출력이 많아졌을 때를 고려해서 BufferWriter을 쓰는 것이 좋다.

  BufferedWriter bw = new BufferedWriter(new  
  OutputStreamWriter(System.out)); // 선언
  String s = "abcdefg"; // 출력할 문자열
  bw.write(s+"\n");// 출력
  bw.flush(); // 남아있는 데이터를 모두 출력시킴
  bw.close(); // 스트림을 닫음

Scanner는 System.in을 생성시 내부에서 try-catch를 사용하여 예외처리를 함
BufferedReader는 throws IOException을 통해 예외처리를 해줘야 함

StringTokenizer

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class scratchPad {
    public static void main(String []args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();

        StringTokenizer st = new StringTokenizer(s); //StringTokenizer 인자값에 입력 문자열 넣음
        int a = Integer.parseInt(st.nextToken()); // 첫번째 호출
        int b = Integer.parseInt(st.nextToken()); // 두번째 호출

        System.out.println(a);
        System.out.println(b);
    }
}

BufferedReader의 데이터는 Line단위로 나누어 지므로, 공백을 기준으로 나누려면 StringTokenizer을 사용해야 한다.

profile
효율적이고 꾸준하게

0개의 댓글