2016-08-11 10 views
1

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

FileOutputStream fos = new FileOutputStream(fileName); 

...

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

Или

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

ответ

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

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

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

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

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

+0

10x !, Ну, я пытаюсь улучшить производительность Jarsigner. Я посмотрел на код. Любая идея, почему они используют PrintStream insteded из BufferedOutputStream?. Когда я переключаюсь на BufferedOutputStream, действие знака ускоряется. –

+0

Отлично :) Понятия не имею. Классы и инструменты Java иногда бывают более эффективными ... Доказательство здесь. В любом случае, я никогда не использую Jarsigner, но из того, что нам говорят в Интернете, он не известен тем, что он быстро :) – davidxxx