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) {

                     }

              }

 

       }

}

 

 



Posted by Steven J.S Min
,