Java學習之流Stream理解(一)

忘塵天外天發表於2017-08-02

  快取可以說是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()方法。

 

相關文章