缓冲区问题汇总
問:
如果緩沖區滿了,但仍有字符被讀入緩沖區,且忘記用flush()方法輸出,那么會自動輸出嗎?還是會發生緩沖區覆蓋?
答:
不會,緩存在關機后其實就消失了。
flush() 是把緩沖區的數據強行輸出,(注意不要和frush()刷新混淆了)
主要用在IO中,即清空緩沖區數據,一般在讀寫流(stream)的時候,數據是先被讀到了內存中,再把數據寫到文件中,當你數據讀完的時候不代表你的數據已經寫完了,因為還有一部分有可能會留在內存這個緩沖區中。這時候如果你調用了close()方法關閉了讀寫流,那么這部分數據就會丟失,所以應該在關閉讀寫流之前先flush()。
還有就是緩沖區官方文檔說明他的空間很大足夠我們使用了
問:
若程序一直啟動著沒有關機呢?緩沖區是有默認大小的么?
答:
有,就像寫word不保存關機以后一樣
問:
在執行close()方法前,系統也會隱含地執行一次flush()操作吧?
答:
如果你沒有寫滿數據不會給你flush,這個時候就會發生你的數據不加flush沒有寫入成功,它只有寫滿了數據才會默認執行flush,這個是也是io為啥加緩沖區,是為了提高效率的。
簡單來說,為了防止多次操作IO(操作IO很費CPU時間),提供了一個緩沖區,當緩沖區滿的時候,再寫入文件,從而提高效率。因此,如果緩沖區沒有寫滿,那么就必須強制他輸出到文件,即調用flush()。
總結
- 上一篇: jdk1.8_googleV3免费下载(
- 下一篇: 为什么有转换流,作用是什么?