處理流:
處理流是對一個已經存在的流的連接配接和封裝,利用的是裝飾設計模式,通過所封裝後的流進行功能調用實作資料讀寫,例如BufferedInputStream,處理流的構造器總是需要帶一個其他流的對象作為參數。一個流經過其他流的多次包裝,稱為流的連接配接,例如FileInputStream的對象經過BufferedInputStream包裝後,才使用BufferedInputStream的對象去調用讀寫資料的方法,那麼這個過程就形成了一個流的連接配接。
讀寫流程示意:
<a href="https://s1.51cto.com/oss/201710/27/77e3075cf3827d1c2e9948c53be2d5de.png" target="_blank"></a>
加解密流程示意:
<a href="https://s5.51cto.com/oss/201710/27/ca19a98bb0f3a54fdca78e650072c0e3.png" target="_blank"></a>
常用的處理流:
FileInputStream和FileOutputStream是基本的流。
緩存流:
BufferedInputStream
BufferedOutputStream
基本資料流:
DataInputStream
DataOutputStream
對象流:
ObjectInputStream
ObjectOutputStream
緩存流作為緩沖讀寫資料使用,它有一個大小為8k的緩存池,加上緩存流的話在讀取資料的時候每次就會一次性讀取8k,然後讀完了再讀取8k,輸出也是如此,是以能夠優化讀寫上的速度,但是隻适合用于單個位元組或少量位元組的讀取或輸出上的事情上才有效果。因為如果是批量讀取的話,每次讀取的位元組數量都比較大,就沒必要多此一舉去使用緩存流了,使用緩存流的話如果不是馬上調用close關閉,就需要調用flush方法來清理緩存。
流程示意:
<a href="https://s4.51cto.com/oss/201710/27/5a97f37368f46e341596b01ead594204.png" target="_blank"></a>
代碼示例:
這是一個拷貝檔案的代碼示例,用于對比讀取單個位元組的情況下,使用緩存流和不使用緩存流的差別,并且對比批量讀取下使用緩存流和不使用緩存流的差別:
單個位元組讀取使用緩存流的方式:
<a href="https://s2.51cto.com/oss/201710/27/e8b916bfe53fc64fd7461f38826fae2f.png" target="_blank"></a>
運作結果:
<a href="https://s1.51cto.com/oss/201710/27/d7d5b1e5f538ec4e5174501846691ea9.png" target="_blank"></a>
單個位元組讀取不使用緩存流的方式:
<a href="https://s1.51cto.com/oss/201710/27/7dae1a13f004cc910532be82d70db6df.png" target="_blank"></a>
<a href="https://s3.51cto.com/oss/201710/27/6334463fd3568bc38f47fa7cdb7a3623.png" target="_blank"></a>
從結果可以看出,緩存流在這種單個位元組讀取的速度優化上效果是相當好。
批量讀取下使用緩存流的方式:
<a href="https://s5.51cto.com/oss/201710/27/9be1f7f1895ecc8c84373cd28338cd30.png" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/27/1cb23a47352fe05c43ca0749b8bae9a8.png" target="_blank"></a>
批量讀取下不使用緩存流的方式:
<a href="https://s4.51cto.com/oss/201710/27/4b3cead83d417315186025df43007cb6.png" target="_blank"></a>
<a href="https://s2.51cto.com/oss/201710/27/bd911b8e2284f13fadfee967082e869e.png" target="_blank"></a>
從結果可以看出,緩存流在這種批量位元組讀取的速度優化上效果是相差無幾的,甚至有時候加上緩存流反而會變慢,是以在這種批量讀取的方式上不需要用緩存流。
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1976622,如需轉載請自行聯系原作者