Buffer란 다른 말로 메모리를 의미하는데, 메모리가 있기 때문에 입출력 시에 병목현상을 줄일 수 있다. 빠른 속도로 읽어들이거나, 빠른 속도로 쓰고자 할때 읽어 들여야 할 대상과 써야할 대상 간의 속도 차이 때문에 병목현상이 일어날 수 있기 때문이다. 따라서 중간에 버퍼를 둠으로써 읽기와 쓰기 시 성능이 향상될 수 있다.
BufferedReader의 경우 한 줄 씩 읽어 들이는 readLine이라는 메소드가 있기 때문에 한 줄씩 읽어 들이기에도 유리하다 . 다만 주의 해야 할 점이 있는데, BufferedWriter의 경우, 버퍼가 있기때문에 반드시 flush()메소드를 이용하거나 close()메소드를 호출 해줘야만 한다. 그렇지 않고 프로그램을 종료하게 되면 버퍼의 내용을 완전하게 쓸 수 없게 된다. 특히 네트워크 프로그래밍의 경우에는 write()메소드를 호출한 후에는 반드시 flush()메소드를 호출해 줘야한다.
FileReader와 FileWriter는 작은 파일은 큰 차이가 없지만 큰 파일의 경우 버퍼가 없기때문에 병목현상이 발생할 수 있어 속도가 느려질수 있다. 이를 위해 BufferedReader와 BufferedWriter를이용해서 IO클래스에게 추가해 주면 된다.
BufferedReader의 생성자는 기본적으로 Reader를 인자로 전달 받는데. Reader를 인자로 전달 받는다는 것은 기존의 Reader에게 Buffer를 가지게 한다는 의미가 되겠다.
package ch5; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; public class BufferFileCopy { public static void main(String[] args) { if (args.length != 2) { System.out.println("사용법 : java FileCopy 파일1 파일2"); System.exit(0); }// if FileReader fr = null; BufferedReader br = null; FileWriter fw = null; BufferedWriter bw = null; try {
fr = new FileReader(args[0]); br = new BufferedReader(fr); fw = new FileWriter(args[1]); bw = new BufferedWriter(fw); char[] buffer = new char[512]; int readcount = 0; while ((readcount = br.read(buffer)) != -1) { bw.write(buffer, 0, readcount); } System.out.println("파일을 복사했습니다."); } catch (Exception ex) { System.out.println(ex); } finally { try { br.close(); bw.close(); } catch (Exception e) { } } } }
'Java > Input/Output Facilities' 카테고리의 다른 글
[문자 스트림] 배열형태로 만든후 내용을 화면으로 출력- CharArrayReader와CharArrayWriter의 사용 (0) | 2013.02.11 |
---|---|
[문자 스트림] 키보드로부터 한줄씩읽어 파일저장 - BufferedReader와PrinterWriter의 사용 (1) | 2013.02.11 |
[문자 스트림] FileReader와 FileWriter를 이용한 파일복사 (0) | 2013.02.11 |
[문자 스트림] 문자단위로 파일내용을 읽은 후 화면으로 출력, 바이트단위처리와 문자단위 처리의 혼합사용 (0) | 2013.02.11 |
[바이트 스트림] 파일이나 배열의 내용을 읽어들여 출력 (0) | 2013.02.11 |