串流又可分為輸出串流與輸入串流,我們可以透過InputStream、OutputStream、Reader與Writer類別來處理串流的輸入與輸出。
- 處理純文字檔使用: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();
}
}
沒有留言:
張貼留言