2017-01-31 86 views
1

FileOutputStreamBufferedOutputStream使用write(byte[])方法時是否存在實際性能差異?在FileOutputStream上測試寫入(byte [])與BufferedOutputStream

我測試了硬盤上寫入500MB的文件,結果爲13 12秒:

try(FileOutputStream out = new FileOutputStream(filePath1)) { 
      out.write(readBytes); 
} 

,並

try(BufferedOutputStream out = new BufferedOutputStream( 
          new FileOutputStream(filePath2))) { 
      out.write(readBytes); 
} 

我缺少的是約BufferedOutputStream效率?

回答

2

BufferedOutputStream如果您一次只寫一點數據,則效率會更高:它會批量寫入,直到它具有「足夠」的數據。

如果您一次寫完所有內容,則不會有任何區別,因爲始終有足夠的數據填充緩衝區;或者您已達到數據的結尾並需要關閉流。

+0

因此,它只會逐字節地寫入數據(即寫入(int b))會有所不同嗎? – user963241

+0

不一定是一個一個;它只是小於緩衝區大小(默認爲8192)。 –

+0

作爲附錄,如果要寫入的數組(片段)與緩衝區大小相同或大小相同,則「BufferedOutputStream」將消失,並直接將數組傳遞到目標流。因此,最糟糕的情況是反覆寫入略小於緩衝區大小的塊,這不會顯着減少目標寫入操作的數量,但會增加複製開銷。在這種情況下,'BufferedOutputStream' *會降低性能。 – Holger

相關問題