【问题标题】:ZipOutputStream : BufferedOutputStream vs PrintStreamZipOutputStream : BufferedOutputStream 与 PrintStream
【发布时间】:2016-08-11 18:25:51
【问题描述】:

我想使用 ZipOutputStream 写入大块字节,首选什么?

FileOutputStream fos = new FileOutputStream(fileName); 

...

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

或者

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

【问题讨论】:

    标签: java fileoutputstream zipoutputstream


    【解决方案1】:
    ZipOutputStream zos =  new ZipOutputStream(new BufferedOutputStream(fos));
    

    看起来更好至少有两个原因:

    • PrintStream 不会抛出 IOException,即使它在写入流时出错。如果出现错误,您可能会在不知情的情况下在 zip 内容中出现错误,从而导致 zip 损坏。

    • PrintStream 的写入成本应该更高,因为 PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。 Javadoc 建议在需要写入字符而不是字节的情况下使用 PrintWriter 类。

    您可以对其进行基准测试以得到确认。

    【讨论】:

    • 10x !,我正在努力提高 Jarsigner 的性能。我看了看代码。知道为什么他们使用 PrintStream 而不是 BufferedOutputStream 吗?当我切换到 BufferedOutputStream 时,符号操作会加速。
    • 优秀:) 也不知道。 Java 类和工具有时是可以改进的......这里的证明。无论如何,我从不使用 Jarsigner,但我们在网上被告知,它并不以速度快而闻名 :)
    猜你喜欢
    • 2013-01-05
    • 2012-07-07
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2018-02-12
    • 2017-09-17
    • 2017-06-17
    相关资源
    最近更新 更多