2010-12-05 2 views
0

первый некоторый код:Проблемы с BZIP-OutputStream

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
CBZip2OutputStream zos = new CBZip2OutputStream(bos); 

provider.sendXMLFilelist(zos); 
zos.flush(); 
bos.flush(); 

length = bos.size(); 

"поставщик" отправить (позволяет говорить) 200 байт на "ZOS". Но length = 1. Я знаю, что bzip хорош, но 1 байт кажется меньше.

Когда я делаю: provider.sendXMLFilelist(bos); чем длина составляет == 200.

Почему не CBZip2OutputStream вывода все его сжатых байт?

Я использую эту реализацию: http://www.kohsuke.org/bzip2/

ответ

2

Думаю, у меня теперь есть ответ. вы должны .close() поток bzip2. Bzip2 ist блочный кодек, и он не знает, нужно ли его заполнять данными или есть больше.

Таким образом, сообщая ему закрыть поток, он выводит все сжатые данные.

+1

Хорошая практика всегда закрывать потоки, во всяком случае, моя радость :) – 2010-12-06 20:00:59

0

Я имел проблемы с этой реализацией библиотеки в прошлом, я бы порекомендовал вам взглянуть на другой реализации bzip2 от Apache commons. Миграция не должна быть сложной (замените CBZip2OutputStream -> BZip2CompressorOutputStream, и вы должны пойти).

+0

Пробовал это. но мое решение, наконец, приводит к успеху. – Bigbohne 2010-12-06 16:30:29

Смежные вопросы