快取可以說是I/O的一種效能優化。快取流為I/O流增加了記憶體緩衝區。有了緩衝區,使得在流上執行skip()、mark()和reset()方法都稱為可能。
1.BufferedInputStream 類 和 BufferedOutputStream 類
BufferedInputStream 類可以對任意的 InputStream 類 進行帶緩衝區的包裝以達到效能的優化。BufferedInputStream 類有兩個建構函式:
BufferedInputStream (InputStream in )
BufferedInputStream (InputStream in,int size )
第一種形式的建構函式建立一個帶有32個位元組的緩衝流;第二種形式的建構函式按指定大小來建立緩衝區。一個最優的緩衝區的大小,取決於它的作業系統、可用的記憶體以及及其配置,從建構函式可以看出,BufferedInputStream 物件位於InputStream 物件之前,位元組資料讀取檔案的過程:
使用BufferedOutputStream輸出資訊和向OutputStream輸入資訊完全一致,只不過BufferedOutputStream有一個flush()方法用來將快取區的資料強制輸出完。BufferedOutputStream 也有兩個建構函式:
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
第一種建構函式建立一個32位元組的快取區,第二種形式以指定的大小來建立快取區。flush()方法就是用於即使快取區沒有滿的情況下,也將快取區的內容強制寫入到外設,習慣稱這個過程為重新整理。flush()方法只對使用快取區的OutputStream 類的子類有效。當呼叫close()方法時,系統在關閉流之前,也會將快取區中資訊重新整理到磁碟檔案中。
2、BufferedReader類和BufferedWriter類
BufferedReader類和BufferedWriter類分別繼承Reader類和Writer類。這兩個類同樣具有內部快取機制,並可以以行為單位進行輸入/輸出。根據BufferedReader類的特點,字元讀取檔案的過程。
BufferedReader類常用的方法:
read():讀取單個字元。
readLine():讀取一個問本行,並將其返回為字串;若無資料可讀,則返回null 。
write(String s ,int offset,int len):寫入字串的某一部分 。
flush():重新整理該流的快取。
newLine():寫入一個 行分隔符。
在使用BufferedWriter類的writer()方法時,資料並沒有立即被寫入至輸出流中,而是首先進入快取區中。如果想立刻將快取區中的資料寫入輸出流中,一定要呼叫flush()方法。