Java:io流之輸出流flush和close


這幾天學習io流,剛開始沒注意輸出流的flush()和close()有什么區別。這里補充一下FileWriter。

flush和close

  • public void close()關閉此輸出流並釋放與此流相關聯的任何系統資源。
  • public void flush() 刷新此輸出流並強制任何緩沖的輸出字節被寫出。

可以看到,flush是刷新,close關閉並且釋放資源。

區別
因為內置緩沖區的原因,如果不關閉輸出流無法寫出字符到文件中。但是關閉的流對象,是無法繼續寫出數據的。如果我們既想寫出數據,又想繼續使用流,就需要flush 方法了。

  • flush刷新緩沖區,流對象可以繼續使用
  • close :先刷新緩沖區,然后通知系統釋放資源流對象不可以再被使用了。

flush

public class FWWrite {
    public static void main(String[] args) throws IOException {
        // 使用文件名稱創建流對象
        FileWriter fw = new FileWriter("fw.txt");
        // 寫出數據,通過flush
        fw.write('刷'); // 寫出第1個字符,
        fw.flush();//直接到文件中了,而不是還在緩沖區中。
        fw.write('新'); // 繼續寫出第2個字符,寫出成功
        fw.flush();//不關閉流對象,繼續寫出到文件。
      
      	// 寫出數據,通過close
        fw.write('關'); // 寫出第1個字符
        fw.close();
        fw.write('閉'); // 繼續寫出第2個字符,【報錯】java.io.IOException: Stream closed
        fw.close();
    }
}

close

public class FWWrite {
    public static void main(String[] args) throws IOException {
        // 使用文件名稱創建流對象
        FileWriter fw = new FileWriter("fw.txt");     
      	// 寫出數據
      	fw.write(97); // 寫出第1個字符
      	fw.write('b'); // 寫出第2個字符
      	fw.write('C'); // 寫出第3個字符
      	fw.write(30000); // 寫出第4個字符,中文編碼表中30000對應一個漢字。
      
      	/*
        【注意】關閉資源時,與FileOutputStream不同。
      	 如果不關閉,數據只是保存到緩沖區,並未保存到文件。
        */
         fw.close();//關閉之后才會寫出到文件中
    }
}
輸出結果:
abC田
  1. 雖然參數為int類型四個字節,但是只會保留一個字符的信息寫出。
  2. 未調用close方法,數據只是保存到了緩沖區,並未寫出到文件中;但FileOutputStream不關閉流也可以保存到文件中。

參考來自黑馬,侵刪


免責聲明!

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



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