1. 程式人生 > >為什麼部分IO流在呼叫Close()方法之前要先呼叫flush()方法

為什麼部分IO流在呼叫Close()方法之前要先呼叫flush()方法

很多人可能一直比較糾結為什麼有的帶有緩衝功能的流在CLose()方法之前要先呼叫flush()方法 , 

我們先大概說一下帶緩衝功能的流的原理   :   如果是需要頻繁的對檔案進行讀或寫  ,   普通流的速度會比較慢  ,   而緩衝流是在普通流的基礎上多了一個緩衝區  ,   當讀或寫的資料達到一定量   ,    再自動往檔案裡進行讀寫  ,   如果沒有裝滿緩衝區檔案就已經讀(寫)完畢 ,   那麼這個時候已經讀寫到緩衝區的資料需要手動使其朝目標檔案進行讀寫.

這個手動的過程  ,  就是我們這裡提到的flush()方法  .   

換句話說  ,  如果是檔案讀寫完的同時緩衝區剛好裝滿  ,   那麼緩衝區會把裡面的資料朝目標檔案自動

進行讀或寫  ,   這種時候你直接呼叫close()方法不會出現問題  ;   但是如果檔案在讀寫完成時   ,   緩衝區沒有裝滿 ,  就直接呼叫close()方法   ,    這個時候裝在緩衝區的資料就不會自動的朝目標檔案進行讀或寫   ,  從而造成緩衝區中的這部分資料丟失  ,  所以這個是時候就需要在close()之前先呼叫flush()方法   ,   手動使緩衝區資料讀寫到目標檔案.     舉個例子:    如果一個檔案大小是20kb  ,   我們的緩衝區大小是15kb  ,    如果Close()方法之前沒有先呼叫flush()方法  ,   那麼這個時候剩餘的5kb資料就會丟失  .