nahwasa   4년 전

https://www.quora.com/Why-is-Scanner-so-much-slower-than-BufferedReader

찾아봐도 제가 이해를 잘 못한것인지 잘 모르겠네요.

버퍼 크기야 데이터 크기가 작다면 상관없을것같고..

Scanner는 토큰을 파싱하고 BufferedReader는 그렇지 않아서 속도차이가 난다고 하는 것 같은데

결국 Scanner의 경우엔 nextInt(), nextDouble() 이런 함수에서 타입을 정해 받을 수 있고 BufferedReader는

String으로만 받을 수 있기 때문이란 말이 아닌가요?

하지만 실제론 Scanner로 nextInt() 하는것보다도 Integer.parseInt()에  BufferedReader로 nextLine() 받은걸 넣는게 더 빠르니

잘 이해가 가지 않네요 ㅠ

혹시 아시는 분 계신가요?

bupjae   4년 전

Scanner 가 느린 가장 큰 이유는 regular expression 의 남용입니다.

예를 들어서 Scanner.nextInt() 는 내부적으로 아래와 같은 regex를 만족하는 입력을 찾으려 합니다.


Scanner 가 이런 짓(?)을 벌이는 이유는 입력에 i18n/l10n 개념을 적용하려고 하기 때문입니다.

예를 들어 Scanner.nextInt() 는 "1,234,567" 과 같은 입력 또한 정수 1234567 로 인정합니다.

안타깝게도 이런 기능은 (거의) 모든 알고리즘 문제에서는 별 쓸모가 없고, 속도저하의 원인으로만 작용하게 되었습니다.

nahwasa   4년 전

아 파싱한다는게 그런 의미였구요 ㅋㅋ 상세한 설명 감사합니다!

댓글을 작성하려면 로그인해야 합니다.