書本常說「字節流操作不使用緩衝區」,但 OutputStream 基類卻提供了 flush() 方法,這似乎矛盾。
OutputStream 是所有字節輸出流的超類,flush() 定義在基類中,子類繼承該方法。OutputStream.flush() 的默認實現是空操作,不執行任何動作。BufferedOutputStream、FileOutputStream)會覆寫 flush(),將內部緩衝區數據強制寫入目標(文件、網絡、內存等)。就像「母雞不會飛卻有翅膀」——基類定義了通用協議,具體能力由子類決定。調用 flush() 時,若對象是無緩衝流則無事發生;若是帶緩衝流則觸發真正刷新。
刷新此輸出流並強制將所有緩衝的輸出字節寫出。若目標是操作系統文件,則保證字節已移交給 OS 寫入;但不保證已物理寫入磁盤。
flush()。close() 內部會自動調用 flush(),通常無需額外調用。