Java 关闭特定输出流的方法

Java 关闭特定输出流的方法,java,stream,outputstream,zipoutputstream,Java,Stream,Outputstream,Zipoutputstream,您认为这段代码是否正确地关闭了输出流条目?知道这不是同一类型的输出流 OutputStream out = new JarOutputStream(new FileInputstrem(fileName)); ... ((ZipOutputStream)out).closeEntry(); 但考虑到两者都是输出流,我认为它们是以相同的方式结束的。因此在我的例子中,((ZipOutputStream)out).closeEntry()与((JarOu

您认为这段代码是否正确地关闭了输出流条目?知道这不是同一类型的输出流

OutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                       ...
((ZipOutputStream)out).closeEntry();
但考虑到两者都是输出流,我认为它们是以相同的方式结束的。因此在我的例子中,
((ZipOutputStream)out).closeEntry()
((JarOutputStream)out)相同

你能确认你认为是真的吗?如果是错的,你能纠正我吗?
谢谢。

因为
JarOutputStream
扩展了
ZipOutputStream
,而且Java中的所有方法都是虚拟的,所以

((ZipOutputStream) out).closeEntry();
调用完全相同的方法ass

((JarOutputStream) out).closeEntry();
但是,我建议您使静态类型更加精确:

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();

由于
JarOutputStream
扩展了
ZipOutputStream
,而且Java中的所有方法都是虚拟的,所以

((ZipOutputStream) out).closeEntry();
调用完全相同的方法ass

((JarOutputStream) out).closeEntry();
但是,我建议您使静态类型更加精确:

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();

如果需要对
out
变量调用特定于
zipoutpstream
的方法,则其类型不应为
OutputStream
,而应为
zipoutpstream

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();

这不会导致任何问题,因为
JarOutputStream
扩展了
zipoutstream
JarOutputStream
也是
zipoutstream
(也是
OutputStream
,也是
对象
).

如果需要对
out
变量调用特定于
zipoutpstream
的方法,则其类型不应为
OutputStream
,而应为
zipoutpstream

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();
这不会引起任何问题,因为
JarOutputStream
扩展了
zipoutstream
,所以
JarOutputStream
也是
zipoutstream
(也是
OutputStream
,也是
对象)

两者都关闭ZIP条目,这样您就可以将另一个条目写入归档文件(如果您想将多个文件存储到一个ZIP/JAR中)。它们不会关闭输出流本身。如果要关闭JarOutputStream和底层FileOutputStream,请使用 out.close()

参见: () ()

两者都关闭ZIP条目,这样您就可以将另一个条目写入归档文件(如果您想将多个文件存储到一个ZIP/JAR中)。它们不会关闭输出流本身。如果要关闭JarOutputStream和底层FileOutputStream,请使用 out.close()

参见: () ()

因此在我的例子中((ZipOutputStream)out.closeEntry();是 与((JarOutputStream)out.closeEntry()相同

这是正确的。没有理由写前者

因此在我的例子中((ZipOutputStream)out.closeEntry();是 与((JarOutputStream)out.closeEntry()相同


这是正确的。没有理由写前者。

谢谢,我不知道JarOutputStream是扩展的ZipOutputStream,它不是ZipOutputStream特定的调用方法,但只需创建泛型方法来创建Zip和Jar存档,并使用通用方法在该方法中关闭它们的输出流条目。但现在我知道JarOutputStream继承了ZipOutputStream,这是最容易实现的。谢谢。如果
JarOutputStream
没有扩展
zipoutpstream
,那么执行
(zipoutpstream)out
将导致
ClassCastException
。这不一定是因为close条目对所有输出流条目执行相同的工作。这就是我问这个问题的原因。我不确定。谢谢,我不知道JarOutputStream是扩展的ZipOutputStream,它不是特定于ZipOutputStream的调用方法,但只需创建泛型方法来创建Zip和Jar存档,并使用通用方法在该方法中关闭它们的输出流条目。但现在我知道JarOutputStream继承了ZipOutputStream,这是最容易实现的。谢谢。如果
JarOutputStream
没有扩展
zipoutpstream
,那么执行
(zipoutpstream)out
将导致
ClassCastException
。这不一定是因为close条目对所有输出流条目执行相同的工作。这就是我问这个问题的原因。我不确定。