BufferedInputStream和BufferedOutputStream類

轉載 BufferedInputStream和BufferedOutputStream類

 (2011-02-21 21:18:49)
標籤: 

雜談

分類: android

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數據寫到目的地,而不是每次都對目的地作寫入的動作

Java代碼 複製代碼
  1. package ysu.hxy;   
  2.   
  3. import java.io.*;   
  4.   
  5. public class BufferedStreamDemo   
  6. {   
  7.     public static void main(String[] args)   
  8.     {   
  9.         try  
  10.         {   
  11.             byte[] data = new byte[1];   
  12.   
  13.             File srcFile = new File(args[0]);   
  14.             File desFile = new File(args[1]);   
  15.   
  16.             BufferedInputStream bufferedInputStream =    
  17.                 new BufferedInputStream(new FileInputStream(srcFile));   
  18.   
  19.             BufferedOutputStream bufferedOutputStream =    
  20.                 new BufferedOutputStream(new FileOutputStream(desFile));   
  21.   
  22.             System.out.println("複製文件:"+srcFile.length()+"字節");   
  23.   
  24.             while(bufferedInputStream.read(data)!=-1)   
  25.             {   
  26.                 bufferedOutputStream.write(data);   
  27.             }   
  28.   
  29.             //將緩衝區中的數據全部寫出   
  30.             bufferedOutputStream.flush();   
  31.   
  32.             //關閉流   
  33.             bufferedInputStream.close();   
  34.             bufferedOutputStream.close();   
  35.   
  36.             System.out.println("複製完成");   
  37.         }   
  38.         catch(ArrayIndexOutOfBoundsException e)   
  39.         {   
  40.             System.out.println("using:java UseFileStream src des");   
  41.             e.printStackTrace();   
  42.         }   
  43.         catch(IOException e)   
  44.         {   
  45.             e.printStackTrace();   
  46.         }   
  47.     }   
  48. };  

   爲了確保緩衝區中的數據一定被寫出至目的地,建議最後執行flush()將緩衝區中的數據全部寫出目的流中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章