您认为此代码是否正确关闭了输出流条目?知道这不是同一类型的输出流。
OutputStream out = new JarOutputStream(new FileInputstrem(fileName));
...
((ZipOutputStream)out).closeEntry();
但考虑到两者都是输出流,我认为它们以同样的方式关闭。因此,在我的情况下,((ZipOutputStream)out).closeEntry();
与((JarOutputStream)out).closeEntry();
如果你认为如果是错的话,你能否确认? 感谢。
答案 0 :(得分:2)
由于JarOutputStream
扩展ZipOutputStream
,并且因为Java中的所有方法都是虚拟的,所以
((ZipOutputStream) out).closeEntry();
调用完全相同的方法嗨
((JarOutputStream) out).closeEntry();
但是,我建议你使静态类型更精确:
ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
...
out.closeEntry();
答案 1 :(得分:2)
如果您需要在ZipOutputStream
变量上调用特定于out
的方法,则其类型不应为OutputStream
,而应为ZipOutputStream
:
ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
...
out.closeEntry();
这不会导致任何问题,因为JarOutputStream
延伸ZipOutputStream
,JarOutputStream
也是ZipOutputStream
(也是OutputStream
,并且也是Object
)。
答案 2 :(得分:1)
因此在我的情况下((ZipOutputStream)out).closeEntry();是的 与((JarOutputStream)out).closeEntry();
相同
这是正确的。没有理由写下前者。
答案 3 :(得分:0)
ZipOutputStream.closeEntry();
和
JarOutputStream.closeEntry();
都关闭ZIP条目,因此您可以在归档文件中写入另一个条目(如果要将多个文件存储到一个ZIP / JAR中)。它们不会关闭输出流本身。如果要关闭JarOutputStream和底层FileOutputStream,请使用 out.close();
参见: http://download.oracle.com/javase/1.4.2/docs/api/java/util/zip/ZipOutputStream.html#close() http://download.oracle.com/javase/1.4.2/docs/api/java/util/zip/ZipOutputStream.html#closeEntry()