Scanner 와 BufferedReader모두 자바에서 데이터를 입력 받기 위해 사용한다.
아마 대부분의 사람들이 자바에서 입력을 받기위해 Scanner를 사용하고 있으리라 생각되는데, 차이가 있음을 알고 용도에 맞게 사용하는 것이 바람직하겠다.
둘의 대표적인 차이점으로는 데이터를 전송하는데 걸리는 시간이라 할 수 있다.
BufferedReader는 버퍼를 사용해 입력을 받고, Scanner는 버퍼를 사용하지 않기 때문에 입력이 바로바로 전송되는 버퍼의 속도가 더 빠르다.
이외에도 BufferedReader는 예외처리를 해주어야하는데 Scanner는 예외처리를 해줄 필요가 없다는 점,
BufferedReader는 입력을모두 String으로 받기 때문에 자료형이 다를 경우 형 변환을 명시적으로 해주어야 하는 점,
등 여러 차이점이 있지만
간단히 정리하자면, Scanner는 단순하고 쓰기는 편리하다. 데이터의 수가 급격히 늘어나는 경우 속도가 빠른 BufferedReader가 효율적이다. 사용자는 두가지를 상황에 따라 적절하게 사용하면 되겠다.
- Scanner 사용법
Scanner sc = new Scanner(System.in); //Scanner 선언
sc.nextByte() // byte 형 입력 및 리턴
sc.nextShort() // short 형 입력 및 리턴
sc.nextInt() // int 형 입력 및 리턴
sc.nextLong() // long 형 입력 및 리턴
sc.nextFloat() // float 형 입력 및 리턴
sc.nextDouble() // double 형 입력 및 리턴
sc.nextBoolean() // boolean 형 입력 및 리턴
sc.next() // String 형 입력 및 리턴
sc.nextLine() // String 형 입력 및 리턴
- Scanner 예제
//Scanner 예제
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(a);
}
}
- BufferedReader 사용법
- BufferedReader 선언
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // BufferedReader 선언
String s = bf.readLine(); // BufferedReader의 기본형인 String 일 경우
//readLine()은 입력값으로 들어온 데이터를 한줄로 읽어서 String으로 바꾸는 메소드이다.
int i = Integer.parseInt(bf.readLine()); // String과 다를 경우 강제로 형 변환을 해줘야한다.
- BufferedReader 예외처리
BufferedReader를 사용하기 위해서는 예외처리도 꼭 해줘야 한다. readLine을 할 때 마다 try & catch를 활용하여 예외처리를 해주어도 되지만 대개 throws IOException을 통하여 작업한다.
- BufferedReader 예제
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
//throws IOException 예외처리
//BufferedReader의 경우 Scanner와 다르게 예외처리가 필요하다.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
System.out.println(n);
}
}
'프로그래밍 > Java' 카테고리의 다른 글
[Java]Method (0) | 2021.03.09 |
---|---|
[Java] print, println, printf (1) | 2021.03.09 |
[Java]제어문 (0) | 2021.03.03 |
[Java]연산자 (0) | 2021.02.26 |
[Java]변수와 상수 (1) | 2021.02.26 |