轉載 BufferedInputStream和BufferedOutputStream類
(2011-02-21 21:18:49)1. java.io.BufferedInputStream與java.io.BufferedOutputStream可以爲InputStream,OutputStream類增加緩衝區功能。構建BufferedInputStream實例時,需要給定一個InputStream類型的實例,實現BufferedInputStream時,實際上最後是實現InputStream實例。同樣,構建BufferedOutputStream時,也需要給定一個OutputStream實例,實現BufferedOutputStream時,實際上最後是實現OutputStream實例。
2. BufferedInputStream的數據成員buf是一個位數組,默認爲2048字節。當讀取數據來源時,例如文件,BufferedInputStream會盡量將buf填滿。當使用read()方法時,實際上是先讀取buf中的數據,而不是直接對數據來源作讀取。當buf中的數據不足時,BufferedInputStream纔會再實現給定的InputStream對象的read()方法,從指定的裝置中提取數據。
3. BufferedOutputStream的數據成員buf也是一個位數組,默認爲512字節。當使用write()方法寫入數據時實際上會先將數據寫到buf中,當buf已滿時纔會實現給定的OutputStream對象的write()方法,將buf數據寫到目的地,而不是每次都對目的地作寫入的動作。
- package ysu.hxy;
- import java.io.*;
- public class BufferedStreamDemo
- {
- public static void main(String[] args)
- {
- try
- {
- byte[] data = new byte[1];
- File srcFile = new File(args[0]);
- File desFile = new File(args[1]);
- BufferedInputStream bufferedInputStream =
- new BufferedInputStream(new FileInputStream(srcFile));
- BufferedOutputStream bufferedOutputStream =
- new BufferedOutputStream(new FileOutputStream(desFile));
- System.out.println("複製文件:"+srcFile.length()+"字節");
- while(bufferedInputStream.read(data)!=-1)
- {
- bufferedOutputStream.write(data);
- }
- //將緩衝區中的數據全部寫出
- bufferedOutputStream.flush();
- //關閉流
- bufferedInputStream.close();
- bufferedOutputStream.close();
- System.out.println("複製完成");
- }
- catch(ArrayIndexOutOfBoundsException e)
- {
- System.out.println("using:java UseFileStream src des");
- e.printStackTrace();
- }
- catch(IOException e)
- {
- e.printStackTrace();
- }
- }
- };
爲了確保緩衝區中的數據一定被寫出至目的地,建議最後執行flush()將緩衝區中的數據全部寫出目的流中。