java中BufferedInputStream and BufferedOutputStream
0
FileInputStream和FileOutputStream 在使用時,我們介紹了可以用byte
數組作為數據讀入的緩存區,以讀文件為列,讀取硬盤的速度遠遠低于讀
取內存的數據,為了減少對硬盤的讀取,通常從文件中一次讀取一定長度
的數據,把數據存入緩存中,在寫入的時候也是一次寫入一定長度的數據
,這樣可以增加文件的讀取效率。太原維信科技
我們在使用FileInputStream的時候是用byte數組來做了緩存,而
BufferedInputStream and BufferedOutputStream已經為我們增加了這
個緩存功能。太原維信科技
在創建BufferedInputStream 實例時(BufferedOutputStream同上),
需要先給定一個InputStream類型的實例(如:FileInputStream)。
解釋BufferedInputStream實現流程:其實質是實現了一個緩存裝置,在
讀取源數據的時候其實還是用的InputStream來實現的。只是在讀取之前
給他們加了一個緩存區而已。
注意這個緩存區默認是位數組,大小2048,當讀文件的時候,
BufferedInputStream會首先填滿緩存區,然后在使用InputStream的
read()方法的時候,把緩存數組中的數據在讀到目的地。太原維信科技
對BufferedOutputStream,有一個默認512字節的緩存數組,當使用
write()方法寫數據時,實質上是先將數據寫至緩存中,當緩存滿時,在
用write()方法把數據寫入。 太原維信科技
public static void main(String[] args) throws IOException {
byte[] buffer = new byte[1]; //創建一個數值,用來放從緩存數組中
讀取出來的數據
BufferedInputStream bi = new BufferedInputStream(new
FileInputStream("d:\\1.txt"));
BufferedOutputStream bo = new BufferedOutputStream(new
FileOutputStream("d:\\2.txt"));
while(bi.read(buffer)!=-1){//如果有數據,則從默認的緩存中讀出來
,這里注意:默認緩存是BufferedInputStream已經填加進去的,buffer
是我們從2048字節的緩存中讀出數據,然后寫數據
bo.write(buffer);//寫入文本
}
bo.flush();//確保數據全部寫入文本,則要刷新一下緩存
}
//關閉流