Проблемы с 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 - это блочный кодек, и он не знает, должен ли он дополнять данные или есть еще.

Поэтому, сказав ему закрыть поток, он выводит все сжатые данные.

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

Другие вопросы по тегам