Проблемы с 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, и вы должны пойти).