데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역
BufferedReader/BufferedWrite 는 이름 그대로, 버퍼를 이용해 읽고 쓰는 함수
버퍼를 사용하지 않는 입력
키보드의 입력이 키를 누르는 즉시 바로 전달 됨 (키보드→프로그램)
버퍼를 사용하는 입력
키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송. 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 전송함
⇒ 입력값을 하나하나 전달하는 것보다 입력받은 값들을 한번에 전달하는 것이 더 효율적이다.
BufferedReader
readLine()
readLine()이라는 메소드를 통해 입력받는다. 이 경우 리턴값은 String으로 고정되기에, String이 아닌 다른 타입으로 입력받기 위해서는 형변환이 필수이다.
예외처리
예외처리가 필수적이다. readLine()실행 시마다 try&catch를 활용해 예외처리를 해주거나, throw IOExceptiond을 이용한다.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
String data = null;
while ((data=in.readLine()) != null) {
System.out.println(data);
}
} catch (IOException e) {
e.printStackTrace();
}
BufferedWriter
write(), flush(), close()
write()를 사용하여 데이터를 입력하고, flush()를 통해 버퍼를 비워내는 동시에 콘솔에 출력 출력이 끝난 후에는 close()를 통해 스트림을 닫아준다.
public static void io2() {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = null; //try블록에서 선언할 경우 finally블록에서 종료불가. 따라서 선언은 try밖에서
try {
out = new BufferedWriter(new FileWriter("playdata.txt"));
String data = null;
while ((data=in.readLine()) != null) {
out.write(data);
out.newLine(); //라인바꿈 반영해서 출력
out.flush(); //버퍼 메모리에 존재하는데이터를 파일에 잔존 데이터 없이 출력
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}