1. 程式人生 > >為什麼只有OutputStream才有flush()方法,而InputStream沒有該方法

為什麼只有OutputStream才有flush()方法,而InputStream沒有該方法

呼叫close方法在關閉流之前,會強制重新整理一下IO緩衝,這個在API裡面也有提到。

flush是要求將該OutputStream的臨時快取清空,強制寫到底層的OutputStream中.flush方法的意思是強制將緩衝區所有的資料輸出!
例如你外面套了一層BufferedOutputStream,那麼你寫入的內容其實有一部分還儲存在這個Stream中,而沒有寫入底層的。所以在某些時候必須呼叫flush要求寫入.

  java.io.OutputStream.flush() 方法重新整理此輸出流並強制將所有緩衝的輸出位元組被寫出。重新整理的常規協定是,呼叫它是一個跡象表明,如果以前寫的任何位元組都被緩衝的輸出流的

實現,如位元組應立即寫入到它們的目的地。

此流的預期目標是由底層的作業系統,例如一個檔案,然後重新整理流保證提供了一個抽象只是先前寫入的位元組流傳遞給作業系統進行寫入;它並不能保證他們實際上寫的是一個物理裝置,如磁碟驅動器

flush重新整理此輸出流並強制寫出所有緩衝的輸出位元組。flush 的常規協定是:如果此輸出流的實現已經緩衝了以前寫入的任何位元組,則呼叫此方法指示應將這些位元組立即寫入它們預期的目標。 
    如果此流的預期目標是由基礎作業系統提供的一個抽象(如一個檔案),則重新整理此流只能保證將以前寫入到流的位元組傳遞給作業系統進行寫入,但不保證能將這些位元組實際寫入到

物理裝置(如磁碟驅動器)。

OutputStream中的flush方法不執行任何操作。


InputStream的read 方法,使用零個引數的 read 方法,一次讀取一個位元組,並將之放入該陣列。 OutputStream的wirte 將指定位元組寫入當前輸出流。 
read 一次一個位元組當然不要flush 
wirte 一次多個就要flush