안드로이드

파일 입출력 속도 향상 (BufferedInputStream/BufferedOutputStream) 사용

raulyo 2012. 2. 22. 19:54
파일 입출력 속도 향상 (BufferedInputStream/BufferedOutputStream) 사용

2007.01.10 15:47 Edit
아래에 있는 파일을 입출력 하는 샘플코드를 수정한 내용이다.
단지 BufferedInputStream, BufferedOutputStream을 사용하는 것많으로도 많은 속도 향상을 가져온다.
그리고 또한 파일 입출력시에 int값을 가지고 조작하는것 보다.. byte배열을 가지고 처리하는것이 더 Performance향상을 가져온다.

[파일을 읽는 예제코드]
FileInputStream fis = null;
byte [] filebody = null;
ResourceBundle prop = null;

try
{
  // properties 파일을 읽어오기 위한 부분
  prop = ResourceBundle.getBundle("winitech");
  File f = new File (prop.getString ("BBS_FILE_PATH") + "test.jpg");

  // 읽으려고 하는 파일이 존재하는지 확인
  // 필요하다면 f.isFile()도 체크한다.
  if (!f.exists())
{
   System.out.println ("읽을 파일이 없습니다");
  }
   
  fis = new FileInputStream (f);
  // 단지 BufferedInputStream을 사용하는 것 만으로도 꽤 많은 속도 향상을 가져올수 있다.
  BufferedInputStream bis = new BufferedInputStream (fis);

  //  파일을 읽기 위해서 생성된 FileInputStream으로 부타 읽을수 있는 크기를 가져온다.
// 크기만큼 byte 배열을 생성한다. 
  filebody = new byte [fis.available()];
  // 생성된 byte배열의 크기만큼 읽어서 저장한다. 
  // (실제 읽을 파일의 크기만큼 배열을 선언했기때문에 파일 전체를 다 읽어서 저장한다.)
  int len = fis.read(filebody, 0, filebody.length);
}
catch (Exception e)
{
  System.out.println (e.toString());
}

[파일을 출력하는 예제 코드]
byte [] filebody = null;
FileOutputStream fout = null;
ResourceBundle prop = null;

try
{
  prop = ResourceBundle.getBundle("winitech");

  // 위(파일입력) 예제와 같이 File객체를 선언해서 해도되고 ,
  // FileOutputStream 생성자에 파일 경로를 바로 지정해도된다.
  fout = new FileOutputStream (prop.getString ("BBS_FILE_PATH") + "test.jpg");
  // 단지 BufferedOutputStream을 사용하는 것 만으로도 꽤 많은 속도 향상을 가져올수 있다.
BufferedOutputStream bos = new BufferedOutputStream (fout);

  // byte 배열의 내용을 한번에 파일로 저장한다. 
  bos.write(filebody, 0, filebody.length);
  bos.flush ();
    
  fout.close();
}
catch (Exception e)
{
System.out.println ("파일 저장중에 오류가  발생했습니다." + e.toString ());
}