Java IO流中的flush()


通過BufferedOutputStream或BufferedWriter 鏈接到底層流上來實現。因此,在寫

完數據時,flush就顯得尤為重要。

例如:

上圖中WEB服務器通過輸出流向客戶端響應了一個300字節的信息,但是,這時的輸出流有一個1024字節的緩沖區。所以,輸出流就一直等着WEB服務器繼續向客戶端響應信 息,當WEB服務器的響應信息把輸出流中的緩沖區填滿時,這時,輸出流才向WEB客戶端響應消息。

為了解決這種尷尬的局面,flush()方法出現了。flush()方法可以強迫輸出流(或緩沖的流)發送數據,即使此時緩沖區還沒有填滿,以此來打破這種死鎖的狀態。

當我們使用輸出流發送數據時,當數據不能填滿輸出流的緩沖區時,這時,數據就會被存儲在輸出流的緩沖區中。如果,我們這個時候調用關閉(close)輸出流,存儲在輸出流的緩沖區中的數據就會丟失。所以說,關閉(close)輸出流時,應先刷新(flush)換沖的輸出流,話句話說就是:“迫使所有緩沖的輸出數據被寫出到底層輸出流中”。

二.解讀flush()源碼:

下面以BufferedOutputStream類為例:

publicclass BufferedOutputStream extends FilterOutputStream
   
{  
   
     publicsynchronizedvoid flush()  throws IOException
   
     {
   
        flushBuffer();
   
        out.flush();
   
     }
   
    privatevoid flushBuffer()  throws IOException
   
    {
        if(count > 0)
   
        {
            out.write(buf, 0, count);
            count = 0;
        }
     }
}

看到這里大家明白了吧,其實flush()也是通過out.write()將數據寫入底層輸出流的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM