
데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리영역
(다른말로 Queue(큐)라고도 표현)
컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용한다
Buffer(버퍼)를 이용하는 함수로써
Scanner 대신 사용함
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test1 {
public static void main(String[] args) throws IOException{
// BufferedReader를 사용하려면 throws IOException으로 예외처리를 해주어야함
// 콘솔에서 입력받을 경우
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 파일에서 입력받을 경우
FileReader fe = new FileReader("파일이름.확장자명");
BufferedReader br_fe = new BufferedReader(fe);
// String 리턴이므로 int로 형변환
int num = Integer.parseInt(br.readLine()); // readLine이란 입력값으로 들어온 데이터를 한 줄로 읽어서 String으로 바꾸는 메소드(무조건 한줄만 읽음!)
br.close();
br_fe.close();
}
}
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class test2 {
public static void main(String[] args) throws IOException{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String a = "고병갑";
bw.write(a+"\n"); // write() 출력할 내용을 담음 엔터가 자동이 아니므로 줄을 띄울땐 "\n"을 넣어줘야함
bw.flush(); // flush() write로 담은 내용을 출력 후 버퍼를 비움
bw.close();
}
}
→ Scanner 보다 빠름
Buffer를 사용하지 않은 입력은 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달되지만
Buffer를 사용한 입력은 키보드의 입력이 있을 때 마다 한 문자씩 버퍼로 전송 → 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한번에 프로그램에 전송
(Scanner는 스페이스와 엔터를 경계로 입력값을 인식하지만
BufferedReader는 엔터만 경계로 인식)
※ BufferedReader는 받은 데이터를 String으로 고정하기 때문에 데이터 후처리를 해야하는 경우가 있다
사용 중지를 알리는 함수
Scanner나 BufferedReader, BufferedWriter를 사용하고 나서는 close(); 라는 메소드를 통해 사용중지를 알려야함
BufferedReader의 경우는 꼭 close() 메소드를 적지 않아도 Garbage Collector에 의해 BufferedReader 및 내부의 객체들이 자동으로 정리된다
즉, Reader의 경우는 close() 메소드를 적지 않아도 됨
단, BufferedWriter의 경우는 작성을 끝낸 후 적절하게 close()를 하지않으면 정상적으로 작성이 안되는 경우가 있음
결론 : 왠만하면 close() 써주자