在java開發中,有時我們會進行流的操作,所以可能會經常遇到這樣一段代碼
out.flush(); out.close();
有時我們只是大概看懂這些,卻不知道其中的原理性東西,下面就來理解一下:
flush()這個函數是清空的意思,用於清空緩沖區的數據流,進行流的操作時,數據先被讀到內存中,然后再用數據寫到文件中,那么當你數據讀完時,我們如果這時調用close()方法關閉讀寫流,這時就可能造成數據丟失,為什么呢,因為,讀入數據完成時不代表寫入數據完成,一部分數據可能會留在緩存區中。
為了防止過於頻繁的寫操作 所以Java提供了一個java.io.BufferedOutputStream類 內部持有一個緩沖區 默認不直接將數據寫到硬盤上 而是存到緩沖區中 直到一定條件后觸發(就是調用上面的flushBuffer()了) 也可以強制通過flush()方法提前觸發。
所以當你認為你完成了某一個比較重要的操作的時候 最好進行一次flush 防止數據在內存中丟失。
多數時候,如果你最后會調用一次close方法,flush方法是可以不使用的,除非你明確的想使數據盡早寫到磁盤或者網絡上。