2016-08-11 51 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

相关问题