回覆列表
  • 1 # 使用者8953191680584

    首先 解釋下這個flush的作用這個是java.io.OutputStream的 空實現(java.io.FileOutputStream使用的是java.io.OutputStream的實現 java.net.SocketOutputStream也是一樣)

    這個是java.io.BufferedOutputStream的為了防止過於頻繁的寫操作 所以Java提供了一個java.io.BufferedOutputStream類 內部持有一個緩衝區 預設不直接將資料寫到硬碟上 而是存到緩衝區中 直到一定條件後觸發(就是呼叫上面的flushBuffer()了) 也可以強制透過flush()方法提前觸發所以當你認為你完成了某一個比較重要的操作的時候 最好進行一次flush 防止資料在記憶體中丟失========================以下是題外話=============================以上全部都是在語言層面上做出的最佳化 實際執行中 作業系統也會做最佳化 並不是實際呼叫了write方法 資料就會落到硬碟上 因為作業系統有IO快取 所以保證資料真正落地的方法不僅僅是呼叫flush 還要呼叫java.io.FileDescriptor#sync()方法 這個方法是本地方法 我沒看實現 不過應該就跟下面這個連結裡說的是一回事檔案I/O程式設計之sync、fsync和fdatasync函式

  • 中秋節和大豐收的關聯?
  • 加菲貓得了貓癬,該怎麼辦?