ZipOutputStream: BufferedOutputStream против PrintStream

Я хочу использовать ZipOutputStream для записи больших кусков байтов, что предпочтительнее?

FileOutputStream fos = new FileOutputStream(fileName); 

...

ZipOutputStream zos =  new ZipOutputStream(new BufferedOutputStream(fos));

Or

ZipOutputStream zos =  new ZipOutputStream(new PrintStream(fos));

person Saar peer    schedule 11.08.2016    source источник


Ответы (1)


ZipOutputStream zos =  new ZipOutputStream(new BufferedOutputStream(fos));

кажется лучше по крайней мере по двум причинам:

  • PrintStream не выбрасывает IOException, даже если у него есть ошибка при записи в поток. В случае ошибки вы можете получить ошибку в содержимом zip-архива, не зная об этом, и, следовательно, получить поврежденный zip-архив.

  • Запись должна быть более дорогой для PrintStream, так как все символы, напечатанные PrintStream, преобразуются в байты с использованием кодировки символов платформы по умолчанию. Javadoc рекомендует использовать класс PrintWriter в ситуациях, требующих записи символов, а не байтов.

Вы можете сравнить его, чтобы получить подтверждение.

person davidxxx    schedule 11.08.2016
comment
10x!, Ну, я пытаюсь улучшить производительность Jarsigner. Я посмотрел на код. Любая идея, почему они используют PrintStream вместо BufferedOutputStream? Когда я переключаюсь на BufferedOutputStream, операция знака ускоряется. - person Saar peer; 11.08.2016
comment
Отлично :) Тоже без понятия. Классы и инструменты Java иногда можно улучшить... Доказательство здесь. В любом случае, я никогда не использую Jarsigner, но, как нам говорят в Интернете, он не известен своей скоростью :) - person davidxxx; 11.08.2016