当前位置: 首页 > 面试题库 >

使用Java ZipOutputStream和BufferedOutputStream的首选方法

方飞鸣
2023-03-14
问题内容

在Java中,先实例化ZipOutputStream还是先实例化BufferedOutputStream

无关紧要?例:

FileOutputStream dest = new FileOutputStream(file);
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(dest));

// use zip output stream to write to

要么:

FileOutputStream dest = new FileOutputStream(file);
BufferedOutputStream out = new BufferedOutputStream(new ZipOutputStream(dest));

// use buffered stream to write to

在我不科学的时光里,我似乎并没有说出太多区别。我在Java
API中看不到任何说明这些方法之一是必需的还是首选的信息。有什么建议吗?似乎先压缩输出,然后将其缓冲以进行写操作会更有效。


问题答案:

你应该总是包裹BufferedOutputStreamZipOutputStream,绝不是相反。请参见以下代码:

FileOutputStream fos = new FileOutputStream("hello-world.zip");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);

try {
    for (int i = 0; i < 10; i++) {
        // not available on BufferedOutputStream
        zos.putNextEntry(new ZipEntry("hello-world." + i + ".txt"));
        zos.write("Hello World!".getBytes());
        // not available on BufferedOutputStream
        zos.closeEntry();
    }
}
finally {
    zos.close();
}

如评论所述,putNextEntry()closeEntry()方法在上不可用BufferedOutputStream。不调用这些方法ZipOutputStream将引发异常java.util.zip.ZipException: no current ZIP entry

为了完整起见,值得注意的是,最后子句只要求close()ZipOutputStream。这是因为按照惯例,所有内置Java输出流包装器实现都传播关闭。

编辑

我只是反过来测试了它。事实证明,将ZipOutputStreamwith
包裹起来BufferedOutputStream,然后仅调用write()它(不创建/关闭条目)不会抛出ZipException。而是生成的ZIP文件将被破坏,其中没有任何条目。



 类似资料:
  • 问题内容: 我有2种方法可以创建using 。 要么: 要么: 除了可重用性之外,使用第二种方式的缺点是什么? 问题答案: 第一种选择使您更具灵活性: 当然会覆盖内容,而不会覆盖,但是我想这不是您的问题。 在属性名称周围加上引号会使它与较不灵活的浏览器更加兼容。

  • 我编写了以下两种加密和解密给定令牌的方法:

  • 问题内容: 嗨, 这是从JComboBox作为字符串获取值的正确方法,以及为什么它是正确的方法。谢谢。 要么 问题答案: 如果仅在JComboBox中放置(非空)引用,则两种方法都可以。 但是,第一种解决方案还允许将来进行修改,您可以在组合框中插入s,s,s等作为项目。 为了对值保持鲁棒性(仍然不强制转换),您可以考虑第三个选择:

  • 问题内容: 两个 和 不通过将数据在内存中的数组缓冲。所以我的问题是 两者之间有什么区别。 何时使用以及何时使用 当我对此感到困惑时,有人可以帮我解决上述两个问题吗? 问题答案: 只要看一下javadoc: ByteArrayOutputStream: 此类实现输出流,在该流中,数据被写入字节数组。 BufferedOutputStream: 该类实现缓冲的输出流。通过设置这样的输出流,应用程序可

  • 本文向大家介绍Java中的BufferedInputStream与BufferedOutputStream使用示例,包括了Java中的BufferedInputStream与BufferedOutputStream使用示例的使用技巧和注意事项,需要的朋友参考一下 BufferedInputStream  BufferedInputStream 是缓冲输入流。它继承于FilterInputStrea

  • 主要内容:1 什么是Java BufferedOutputStream,2 Java BufferedOutputStream的语法,3 Java BufferedOutputStream的构造方法,4 Java BufferedOutputStream的方法,5 Java BufferedOutputStream的例子1 什么是Java BufferedOutputStream Java BufferedOutputStream 类用于缓冲输出流。它在内部使用缓冲区存储数据。与将数据直接写入流