자라나라 개발머리

[JAVA] 왜 BufferdReader를 사용할까?/BufferdReader 사용 전후 비교 본문

Java

[JAVA] 왜 BufferdReader를 사용할까?/BufferdReader 사용 전후 비교

iammindy 2022. 7. 11. 16:35

왜 BufferdReader를 사용할까?

 

백준 알고리즘 풀이과정을 보다가 상위에 올라와 있는 풀이과정을 보면 대부분 Scanner말고 BufferedReader를 사용해서 입력을 받는다. 그래서 왜 스캐너 안쓰고 BufferedReader를 쓰는지 궁금해졌다.

 

BufferdReader와 Scanner의 차이에 대해선 아래 글에 너무너무 설명이 잘 돼 있다.

 

https://dlee0129.tistory.com/238

 

자바(JAVA) - Scanner & BufferedReader

자바(JAVA) - Scanner & BufferedReader 자바를 처음 배울 때 사용자(키보드) 입력받기 위해 보통 Scanner 클래스를 사용합니다. 하지만 알고리즘을 풀기 시작하면서 백준에서 Scanner를 사용하여 입력을

dlee0129.tistory.com

 

위 글에서 내가 궁금했던 부분만을 정리하자면,

 

스캐너말고 버퍼드리더는 쓰는 이유는?

스캐너보다 입력 받는 속도가 더 빠르기 때문이다.

 

스캐너보다 버퍼드리더가 더 빠른 이유?

버퍼드리더는 버퍼를 사용해서 데이터를 모았다가 한 번에 보내기 때문이다. 버퍼를 사용하지 않는 경우엔 키보드 키를 누를 때 마다 데이터가 보내진다.

 

 

 

BufferdReader 사용 전후 비교

 

백준 알고리즘 최근에 풀었던 문제에 Scanner 대신 BufferedReader를 써서 입력을 받아봤다. 외의 코드는 동일했다.

 

위가 BufferedReader 사용, 아래가 Scanner 사용. 중간은 무시!

시간도 약 1/2 감소했고 메모리도 줄었다. 앞으로는 BufferdReader를 사용해서 작성해야겠다.

 

 

여담으로, 풀었던 문제들의 입력 조건 중에 '첫째줄에 빈칸을 사이에 두고 입력한다' 라는 표현이 계속 등장했었다.

스캐너 쓸 때는 그냥 무시하고 문제 풀었었는데, 버퍼드리더 쓰니까 왜 저렇게 입력하라는지 알게됐다.

BufferdReader로 데이터를 받은 뒤 StringTokenizer로 공백 단위로 가공해야 한다.