가장 큰 차이 = 속도 차이
싱글 스레드를 사용하는 Scanner보다
동기화를 사용하는 BufferedReader가 조금은 느리다.
그!러!나
Scanner는 정규식을 사용하여 값을 받기에,
결론적으로는 BufferedReader가 사용자의 입력을 더 빠르게 읽어들일 수 있다.
BufferedReader
- 문자열(String)밖에 읽지 못함.(∴ readLine()함수만 사용)
- 버퍼의 크기: 8kb ( ∴ 긴 문자열 유리 )
- 동기화 사용
Scanner
- 정수값(int,short,long), 소수값(float,double), 문자열(String)읽기 가능.
( ∴ nextInt(),nextShort()...등등 사용 ) - 버퍼의 크기: 1kb
- 입력을 읽는 과정에서 내부에서 정규식 사용한 파싱, 입력값 분할.
- 싱글스레드 사용. 동기화 미사용. ( ∴여러 스레드 간 공유 불가능 )
추가
버퍼란 무엇인가?
결론을 말하자면, 임시 저장용 메모리 영역.
CPU와 보조기억장치 사이에서 사용함.
버퍼는 왜 쓰는가?
컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용함.
이 때, 한 번에 전송시키기 때문에, 전송 시간에 있어 효율적임.
그런데, 왜 한 번에 묶어서 전송시키려 하는가?
입력 속도와 출력 속도의 간격(차이)을 줄여주기 위해서.
또한, 버퍼에 저장하는 동안(전송하기 전에) 사용자가 수정 가능.
간격..? 무슨 간격?
예시를 들어보자.
CPU가 1초에 처리할 수 있는 데이터가 100개라고 한다면,
처리할 데이터를 갖고있는 보조 기억 장치는 1초에 3개밖에 보내주지 못함.
그러면 CPU는 일을 더 하고싶어도 일이 없으니 못하는 상황이 발생함.
한마디로, CPU(능력자)가 보조기억장치(폐급) 때문에 비효율적이게 돼버림.
그래, 그럼 그 간격을 버퍼는 어떻게 줄여주는가?
일단, 버퍼는 주기억장치를 사용하는데, 이는 보조기억장치보다는 빠름.
1. '보조기억장치'는 '주기억장치에 있는 버퍼'에 정보를 넘겨.
2. 버퍼는 일단은 다 받고 쌓아놔.
3. CPU는 그동안 여기저기서 많은 일들을 해결하고있어.
4. CPU가 버퍼 봤는데, 버퍼가 그간 열심히 쌓아놨네?
5. "이 정도는 껌이지~" 하고, CPU는 또 휘리릭 해결해버려.
'자료구조' 카테고리의 다른 글
+) [JAVA] 힙정렬 알고리즘 정리 - heap sort (0) | 2023.03.15 |
---|---|
[알고리즘] 자바로 순열, 조합 (nPr, nCr) java (0) | 2023.03.05 |
+) static, final, static final 구분 (0) | 2023.02.21 |
+) JAVA 문자열 비교하기 ==, equals() (0) | 2023.02.21 |
스택(Stack), 큐(Queue), DFS & BFS 기본 개념 (0) | 2023.02.18 |