버퍼를 한 번 거쳐가는데 빠른 이유는 하드뿐만 아니라 키보드, 모니터 등 외부장치의
데이터 입출력은 시간이 걸리는 작업이다.
버퍼링없이 키보드가 눌릴 때마다 문자의 정보를 목적지로 바로 이동시키는 것보다
중간에 메모리 버퍼를 둬서 데이터를 한 곳에 묶어서 이동시키는 것이 보다 효율적이고 빠르다.
사용 방법
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
// 예외 처리 필수 try catch~ 혹은 thorws IOException
// 콘솔에서 입력받을 경우
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 파일에서 입력받을 경우
FileReader fr = new FileReader("파일명.파일형식");
BufferedReader br_f = new BufferedReader(fr);
// String을 리턴하기 때문에 형변환 필수
// readLine() : 데이터를 라인 단위로 읽는 함수
int num = Integer.parseInt(br.readLine());
// 입출력이 끝난 후 닫기
br.close();
}
}
한 줄 단위로 읽기때문에 공백 단위로 데이터를 알려면 StringTokenizer의 nextToken() 함수를 이용하거나
String 클래스의 split 함수를 이용하는 방법이 있다.
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String array[] = br.readLine().split(" ");
System.out.println("");
와 동일하게 사용 가능한 함수사용 방법
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
// 예외처리
BufferedWriter bw = new BufferedWriter(new FileWriter("BufferedWriter.txt"));
bw.write("hellon\n");
bw.newLine();
bw.write("Write practice\n");
bw.flush();
bw.close();
}
}
BufferedWriter의 경우 버퍼를 할당했기 때문에 반드시 flush() / close()를 반드시 호출하여 마무리한다.
System.out.println("");
처럼 함수가 문자열 출력과 개행을 동시에 지원하지 않기 때문에
개행을 하려면 write에 \n
을 넣어주거나 newLine();
함수를 사용한다.