2010-12-05 83 views
0

premier du code:Problèmes avec BZIP-OutputStream

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

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

length = bos.size(); 
"fournisseur"

envoyer (lets dire) 200 octets à "ZOS". Mais length est == 1. Je sais que bzip est bon, mais 1 octet semble un peu moins.

Quand je fais: provider.sendXMLFilelist(bos); que la longueur est == 200.

Pourquoi ne CBZip2OutputStream pas émis tous ses octets compressés?

J'utilise cette implémentation: http://www.kohsuke.org/bzip2/

Répondre

2

Je pense que j'ai maintenant la réponse. vous devez .close() le flux bzip2. Bzip2 est un codec en bloc et il ne sait pas s'il doit remplir les données ou s'il y en a plus. Donc en lui disant de fermer le flux l'amène à sortir toutes ses données compressées.

+1

C'est une bonne pratique de toujours fermer les cours d'eau, de toute façon mes félicitations :) –

0

J'ai eu des problèmes avec cette mise en œuvre de la bibliothèque dans le passé, je vous recommande de regarder une autre mise en œuvre bzip2 de Apache commons. La migration ne devrait pas être complexe (remplacez CBZip2OutputStream -> BZip2CompressorOutputStream et vous devriez y aller).

+0

J'ai essayé ceci. mais ma solution mène finalement au succès. – Bigbohne