2017年7月2日 星期日

Java:I/O輸入與輸出、緩衝區(Buffer)

在Java裡,是以Stream串流的方式處理輸出與輸入,串流裡的資料是由字元(characters)與位元(bits)所組成,可以經由Stream從資料來源讀寫檔案,也可以將資料以字元或位元的型式寫到檔案裡。

串流又可分為輸出串流與輸入串流,我們可以透過InputStream、OutputStream、ReaderWriter類別來處理串流的輸入與輸出。


  • 處理純文字檔使用:Reader與Writer類別

  • 處理純文字檔二進位檔使用:InputStream與OutputStream類別

下面範例使用InputStream與OutputStream來處理圖片檔案:


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class JavaIO {

 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  FileInputStream fi = new FileInputStream("D:\\java\\DSC00653.jpg");
  FileOutputStream fo = new FileOutputStream("E:\\DSC.jpg");
  System.out.println("File Size = " + fi.available());  //透過fi物件取得檔案大小,並列印出來
  byte data[] = new byte[fi.available()];       //建立byte型態的陣列,其大小剛好可以容納整個圖片檔案
  fi.read(data);
  fo.write(data);
  System.out.println("file copied and renamed");
  fi.close();
  fo.close();
 }

}

緩衝區(Buffer):
上面的方法沒有使用緩衝區,比起有使用緩衝區的處理方式而言,沒有使用緩衝區的程式比較沒有效率,因為不需要一直存取磁碟,這在處理比較複雜的文字檔的時候,可以感覺出來效率的差別。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class JavaIO {

 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  FileInputStream fi = new FileInputStream("D:\\java\\DSC00653.jpg");
  BufferedInputStream bi = new BufferedInputStream(fi);
  FileOutputStream fo = new FileOutputStream("E:\\DSC.jpg");
  BufferedOutputStream bo = new BufferedOutputStream(fo);
  System.out.println("File Size = " + fi.available());
  byte data[] = new byte[fi.available()];
  bi.read(data);
  bo.write(data);
  System.out.println("file copied and renamed");
  fi.close();
  fo.close();
 }

}

沒有留言:

張貼留言