2010-10-28 66 views

回答

9

緩衝的好處是效率。一次寫入4096個字節的數據塊比寫入4096個字節的數據速度通常更快。

緩衝的缺點是您錯過了反饋。輸出到句柄可以保留在內存中,直到寫入足夠的字節以便寫入文件句柄爲止。程序的一部分可能會將一些數據寫入文件,但程序的不同部分或其他程序不能訪問該數據,直到程序的第一部分將數據從內存複製到磁盤。根據數據寫入該文件的速度有多快,這可能需要很長時間。

當您調用flush()時,即使緩衝區未滿,您仍要求操作系統立即將緩衝區中的所有數據寫入文件句柄。

3

flush通知輸出流將所有數據發送到基礎流。這是必要的,因爲內部緩衝。緩衝區的基本目的是最大限度地減少對底層流API的調用。如果我將長字節數組存儲到FileOutputStream,我不希望Java每個字節調用一次操作系統文件API。因此,在Java內部和外部的各個階段都使用緩衝區。即使你每個字節都調用fputc一次,操作系統也不會真的每次寫入磁盤,因爲它有自己的緩衝區。

4

數據在實際寫入磁盤(在緩衝區中)之前有時會被緩存,導致緩衝區中的內容被寫入磁盤。