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条目对所有输出流条目执行相同的工作。这就是我问这个问题的原因。我不确定。