首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java字節流為什麼有flush方法?

     編輯:程式設計綜合問答

疑惑來源

書本常說「字節流操作不使用緩衝區」,但 OutputStream 基類卻提供了 flush() 方法,這似乎矛盾。

核心解釋

  1. 繼承關係:OutputStream 是所有字節輸出流的超類,flush() 定義在基類中,子類繼承該方法。
  2. 基類默認實現:OutputStream.flush() 的默認實現是空操作,不執行任何動作。
  3. 子類覆寫:帶緩衝的子類(如 BufferedOutputStream、FileOutputStream)會覆寫 flush(),將內部緩衝區數據強制寫入目標(文件、網絡、內存等)。

類比理解

就像「母雞不會飛卻有翅膀」——基類定義了通用協議,具體能力由子類決定。調用 flush() 時,若對象是無緩衝流則無事發生;若是帶緩衝流則觸發真正刷新。

官方文檔語義

刷新此輸出流並強制將所有緩衝的輸出字節寫出。若目標是操作系統文件,則保證字節已移交給 OS 寫入;但不保證已物理寫入磁盤。

實際開發建議

  • 僅在使用帶緩衝流(或不確定流類型)時調用 flush()。
  • 關閉流時 close() 內部會自動調用 flush(),通常無需額外調用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved