在Java中,我是否实例化一个有关系吗?压缩输出流 http://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipOutputStream.html首先,或者缓冲输出流 http://docs.oracle.com/javase/8/docs/api/java/io/BufferedOutputStream.html第一的?例子:
FileOutputStream dest = new FileOutputStream(file);
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(dest));
// use zip output stream to write to
Or:
FileOutputStream dest = new FileOutputStream(file);
BufferedOutputStream out = new BufferedOutputStream(new ZipOutputStream(dest));
// use buffered stream to write to
在我的非科学时间安排中,我似乎无法看出这里有多大区别。我在 Java API 中看不到任何说明这些方法之一是否必要或首选的内容。有什么建议吗?看起来首先压缩输出然后缓冲它以进行写入会更有效。
你应该总是包裹BufferedOutputStream
与ZipOutputStream
,绝不是相反。请看下面的代码:
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()
and closeEntry()
方法不可用BufferedOutputStream
。不调用这些方法ZipOutputStream
抛出异常java.util.zip.ZipException: no current ZIP entry
.
为了完整起见,值得注意的是,finally 子句仅调用close()
on the ZipOutputStream
。这是因为按照惯例,所有内置 Java 输出流包装器实现都会传播关闭。
EDIT
我刚刚以相反的方式测试了它。事实证明,包裹一个ZipOutputStream
with BufferedOutputStream
然后只调用write()
在它上面(不创建/关闭条目)不会抛出ZipException
。相反,生成的 ZIP 文件将被损坏,其中没有任何条目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)