2016-08-11 39 views
1

我想使用ZipOutputStream寫入大塊字節什麼是首選?ZipOutputStream:BufferedOutputStream vs PrintStream

FileOutputStream fos = new FileOutputStream(fileName); 

...

ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos)); 

或者

ZipOutputStream zos = new ZipOutputStream(new PrintStream(fos)); 

回答

1
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos)); 

似乎至少有兩個原因更好:

  • PrintStream即使在寫入流期間發生錯誤也不拋出IOException。如果出現錯誤,您可能會在不知道它的情況下在zip內容中出現錯誤,從而導致壓縮文件損壞。

  • 對於PrintStream而言,由於PrintStream打印的所有字符都使用該平臺的默認字符編碼轉換爲字節,因此寫入操作應該更加昂貴。 Javadoc建議在需要編寫字符而不是字節的情況下使用PrintWriter類。

您可以通過基準測試來確認。

+0

10x!,那麼我想改善Jarsigner的表現。我看了一下代碼。任何想法爲什麼他們使用PrintStream的BufferedOutputStream嗎?當我切換到BufferedOutputStream時,符號操作會加速。 –

+0

優秀:) 不知道。 Java類和工具有時可以改進...這裏的證明。 無論如何,我從來沒有使用Jarsigner,但從我們被告知在網絡上,它不知道是快速:) – davidxxx

相關問題