1

このコードは出力ストリームエントリを正しく閉じると思いますか?これが同じタイプの出力ストリームではないことを知っています。

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

しかし、どちらも出力ストリームであることを考えると、同じように閉じていると思いました。したがって、私の場合((ZipOutputStream)out).closeEntry();((JarOutputStream)out).closeEntry();

あなたが正しいと思うならそれを確認できますか、間違っているなら私を訂正できますか?ありがとう。

4

4 に答える 4

2

JarOutputStreamを拡張ZipOutputStreamし、Javaのすべてのメソッドが仮想であるため、

((ZipOutputStream) out).closeEntry();

まったく同じメソッドassを呼び出します

((JarOutputStream) out).closeEntry();

ただし、静的型をもう少し正確にすることをお勧めします。

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();
于 2011-10-04T09:12:11.050 に答える
2

ZipOutputStream変数に固有のメソッドを呼び出す必要がある場合out、その型はではなくOutputStreamZipOutputStream

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

これは問題を引き起こしません。なぜなら、JarOutputStreamextendsなのでZipOutputStream、aJarOutputStreamもaですZipOutputStream(そして、も、OutputStreamもですObject)。

于 2011-10-04T09:12:18.447 に答える
1

したがって、私の場合((ZipOutputStream)out).closeEntry(); ((JarOutputStream)out).closeEntry();と同じでした。

それは正しいです。前者を書く理由は何もありません。

于 2011-10-04T09:31:16.473 に答える
0
ZipOutputStream.closeEntry();

JarOutputStream.closeEntry();

どちらもZIPエントリを閉じるので、アーカイブファイルに別のエントリを書き込むことができます(複数のファイルを1つのZIP / JARに保存する場合)。出力ストリーム自体は閉じません。JarOutputStreamと基になるFileOutputStreamを閉じる場合は、out.close();を使用します。

Cf . : 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()

于 2011-10-04T09:26:05.383 に答える