버퍼(Buffer) 란 ?
- 처리속도가 빠른 장치와 느린 장치 사이의 속도차이를 개선하여 효율을 개선하게 해주는 중간 장치라고 생각할 수 있다.
- Ex) 입출력에서의 Buffer
- CPU와 보조기억장치 사이의 속도차이를 개선하여 준다.
- 즉, 데이터를 처리하는 CPU는 속도가 빠르지만 데이터를 가지고 있는 보조기억장치는 느리다. 따라서 Buffer에 보조기억장치에서 처리가 필요한 데이터를 저장해놓고 CPU가 Buffer를 통으로 처리한다고 생각하면 편할 것이다.
- 먼저 처리요청된 데이터를 처리해야 하므로 선입선출(FIFO)구조가 필요하다. 그렇기 때문에 Queue를 이용해서 구현된다.
BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터는 String 타입으로 고정되기 때문에 따로 데이터를 가공해야하는 경우가 많다. 하지만 Scanner의 속도보다 빠르다.
BufferedReader의 Buffer Size는 8192 char 이기 때문에 입력이 많을수록 Buffer가 유리하다.
BufferedReader 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine();
int i = Integer.parseInt(br.readLine());
// StringTokenizer
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// String.split() 함수
String arr[] = s.split(" ");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "가나다" // 출력할 문자열
bw.write(str); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();
int i = Integer.parseInt(br.readLine());
String은 불변 속성을 갖고 StringBuilder / StringBuffer 은 그렇지 않다는 것이다.
이를 해결하기 위해 StringBuilder / StringBuffer 가 등장했다.
StringBuilder / StringBuffer 둘의 차이점
StringBuffer : 동기화를 지원하여 멀티 쓰레드 환경에서 안전하다.
StringBuilder : 동기화를 지원하지 않아 멀티 쓰레드 환경에 사용하기 적합하지 않다. 대신, 동기화를 지원하지 않기에 단일쓰레드에서는 StringBuffer보다 성능이 뛰어나다.
StringBuilder 사용법
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b").append(" ");
sb.append("c").append("\n");