Способ закрыть определенные выходные потоки - PullRequest
1 голос
/ 04 октября 2011

Как вы думаете, этот код правильно закрывает запись потока вывода? Зная, что это не тот же тип выходного потока.

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

Но, учитывая, что оба потока вывода, я думал, что они закрываются одинаково. И поэтому в моем случае ((ZipOutputStream)out).closeEntry(); было таким же, как ((JarOutputStream)out).closeEntry();

Можете ли вы подтвердить это, если считаете, что это правда или поправьте меня, если ошибаетесь? Спасибо.

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

Если вам нужно вызвать методы, специфичные для ZipOutputStream, в вашей переменной out, то ее тип должен быть не OutputStream, а ZipOutputStream:

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

Это не вызывает никаких проблем, так как JarOutputStream расширяет ZipOutputStream, JarOutputStream также является ZipOutputStream (и также OutputStream, а также Object).

2 голосов
/ 04 октября 2011

Поскольку JarOutputStream расширяет ZipOutputStream, а все методы в Java являются виртуальными, выполнение

((ZipOutputStream) out).closeEntry();

вызывает точно такой же метод задницу

((JarOutputStream) out).closeEntry();

Однако я бы посоветовал вам сделать статический тип более точным:

ZipOutputStream out = new JarOutputStream(new FileInputstrem(fileName));
                   ...
out.closeEntry();
1 голос
/ 04 октября 2011

И, следовательно, в моем случае ((ZipOutputStream) out) .closeEntry ();был таким же, как ((JarOutputStream) out) .closeEntry ();

Это правильно.Нет оснований писать первое вообще.

0 голосов
/ 04 октября 2011
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()

...