JAVA BufferedReader

meonji·2021년 11월 18일
0
post-thumbnail

JAVA를 처음 배울 때는 Scanner로 입력을 받는데요. 만약 백준 알고리즘을 가면 BufferedReader을 사용해야 할 때가 옵니다.
일반적으로 Scanner의 사용 방법은 아래와 같습니다.

Scanner sc = new Scanner(System.in); //Scanner 객체 생성

sc.nextInt();
sc.nextFloat();
sc.next();
sc.nextLine();
//여러 가지 형 입력

띄어쓰기와 엔터로 구분하여 입력 값을 인식하기 때문에 BufferedReader 보다 쉽게 사용 가능합니다.

근데 왜 Scanner 말고 BufferedReader인가?🤔

그에 대한 이유는 속도에 있습니다!


버퍼(Buffer) : 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역
BufferedReader 말대로 Buffer에 키보드에 눌린 문자의 정보를 메모리 버퍼에 담아 한 번에 프로그램에 전송합니다.
예시로 사람 50명을 다른 지역으로 이동시키기 위해서 버스로 3-4명씩 옮기는 것보다 버스에 최대한 사람을 모아서 옮기는 것이 훨씬 적은 시간이 걸리겠죠?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());

이처럼 확실히 Scanner보다 코드가 길어지고 복잡해집니다.

사용방법

-1. StringTokenizer
:문자열이 한 종류의 형으로 연결되어 있을 경우 문자열을 분리

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.reaLine());

int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
//int형 배열
while(st.hasMoreTokens()){ //hasMoreTokens : 남아있는 토큰이 있는지 확인
	arr[i] = Integer.parseInt(st.nextToken()); //nextToken : 토큰 하나씩 꺼냄
    	i++;
}

//String형 배열
int i=0;
while(st.hasMoreTokens()){ //hasMoreTokens : 남아있는 토큰이 있는지 확인
	String token = st.nextToken();
}
    1. String.split()
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();
String arr[] = s.split();

int a =Integer.parseInt(parseInt(arr[0]);
int b =Integer.parseInt(parseInt(arr[1]);

주의할 점

    1. 예외처리를 해야함
public static void main(String args[]) throws IOException{}
    1. BufferedReader은 String값으로 가공 => int형으로 사용하기 위해
Integer.parseInt(br.readLine());

비교

간단한 a + b 문제로 위는 BufferedReader이고 아래는 Scanner로 실행해본 결과
코드길이는 분명 길지만 속도와 메모리는 적은 것으로 알 수 있습니다!

🚨자바 초보자의 글입니다. 오타나 잘못된 정보가 있으면 알려주세요🍀

profile
이게 뭔지 먼지의 개발과정

0개의 댓글