Study/Java
[Java]Scanner 와 BufferedReader의 차이
짱이08
2023. 3. 15. 11:31
두가지 모두 Java 에서 값을 입력 받는 데 사용되는 클래스이다
알고리즘을 풀기 위해서 입력받을 값을 사용할때 이 클래스들을 사용한다.
아래로는 두 클래스의 차이점과 어떤 클래스를 사용하는것이 유리할 지에 대하여 설명한다.
| 차이점 | scanner | BufferedReader |
| 입력받는 방식 | 공백, 개행등의 구분자 사용하여 값을 구분 | 한 줄씩 값을 구분 |
| 입력값의 형태 | 다양한 형태의 값(정수, 실수, 문자열 등등) | 문자열 |
| 성능 | 상대적으로 느림 | 빠름 |
import java.util.*;
public class Main {
public static void main(String[] args) {
//스캐너 객체를 생성
Scanner s = new Scanner(System.in)
//정수형 변수 입력받기
int num = s.nextInt();
//실수형 변수 입력받기
double dNmu = s.nextDouble();
//문자열 입력받기
String str = s.nextLine();
//입력 스트림 닫기
s.close()
}
}
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//변수 입력받기
String str = br.readLine();
// 정수형 변수 -> 문자열로 입력 받은 것을 형변환 해준다
int num = Integer.ParseInt(str);
//입력 스트림 닫기
br.close();
}
}
두가지 코드를 비교해 보면 Scanner 의 경우 값을 입력 받을때 형태에 대해서 다르게 입력을 받는 것을 볼 수 있다
반면에, BufferedReader는 문자열로 입력을 받고, 이를 적절한 형태로 형변환 하여 사용한다.
BufferedReader를 사용하는 이유
BufferedReader는 한 줄씩 입력받기 때문에 공백이나 개행 문자와 상관없이 원하는 형태로 값을 입력받을 수 있다.
반면 Scanner는 값을 입력받을때 공백이나 개행 문자로 구분해줘야 한다
Scanner는 값을 입력받아 읽어올때 형태에 따라 다르게 처리를 할 수 있다.
(위에 나온 예시처럼 정수, 실수, 문자열 등으로 변수의 형태를 지정)
이 때문에 정규식 처리 등의 추가적인 작업을 한다.
BufferedReader 는 문자열 형태로만 값을 읽어오기 때문에 처리 속도가 빠르다.
또한 메모리 사용량에도 차이가 나는데
Scanner 는 다양한 형태의 입력값을 처리하기 위해 입력값을 내부 버퍼에 저장하고,
BufferedReader는 입력값을 한 줄씩 읽어오기 때문에 내부버퍼를 사용하지 않는다
이러한 차이점으로 입력 값이 크거나 빠른 속도가 필요할 경우 BufferedReader 를 쓰는 것이 유리하다