알고리즘 문제를 풀다보니 대부분의 사람들이 bufferedreader, bufferedwriter을 쓰는 걸 발견했다.
나는 이걸 처음 보기 때문에 자세하게 정리해보고자 한다.
우선, 말 그대로 버퍼를 사용하여 읽기/쓰기를 하는 함수이다.
버퍼를 사용하지 않으면, 키를 누르는 즉시 바로 프로그램에 전달되고
버퍼를 사용하면, 키를 누르면 한 문자씩 버퍼로 전송한다. 버퍼가 가득 차거나 혹은 개행 문자가 나타나면 버퍼의 내용을 한 번에 프로그램에 전달한다.
하드디스크와 입출력 장치의 속도가 느리기 때문에 버퍼를 사용하는 것이 훨씬 효율적이다.
예를 들면, 쓰레기가 생길 때마다 쓰레기 장에 내다 버리는 것보다 한 번에 모아 버리는 것이 더 효율적인 것처럼 말이다.
bufferedreader은 입력 받은 데이터 형태가 string이다.
그래서 형 변환이 필요하며, 많은 입력이 필요할 경우에는 좋지 못한 성능을 불러온다.
입력 받을 데이터가 많지 않은 경우에는 scanner보다 훨~씬 빠르다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import 후 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
정수 타입을 입력받기 위해서는 string 타입으로 입력 받은 후 parseInt로 형 변환을 해주면 된다.
BufferedReader는 한 줄 씩 읽어오게 된다. 공백 단위로 분리하기 위해서는 StringTokenizer을 사용해준다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(""); 대신 사용할 수 있다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "abcdef"
bw.write(s); //출력
bw.newLine(); //줄바꿈
bw.flush(); //남아있는 데이터 모두 출력
bw.close();
String은 불변 속성, StringBuilder은 가변 속성
문자열에 변경이 자주 일어날 경우, StringBuilder가 유리하다.
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b").append(" ");
<참고> 여기 정리가 정말 잘 되어 있다..