2010-12-05 5 views
0

ersten einigen Code:Probleme mit BZIP-Output

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

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

length = bos.size(); 

"Anbieter" senden (sagen wir) 200 Byte auf "ZOS". Aber length ist == 1. Ich weiß, bzip ist gut, aber 1 Byte scheint ein wenig weniger.

Wenn ich tun: provider.sendXMLFilelist(bos); als die Länge ist == 200.

Warum nicht alle seine komprimierten Bytes ist CBZip2OutputStream Ausgang?

Ich verwende diese Implementierung: http://www.kohsuke.org/bzip2/

Antwort

2

Ich denke, ich habe jetzt die Antwort. Sie müssen .close() der Bzip2-Stream. Bzip2 ist ein Blockcodec und es weiß nicht, ob es die Daten auffüllen muss oder ob es mehr gibt.

Wenn Sie ihm also sagen, dass er den Stream schließen soll, bringt er ihn dazu, alle komprimierten Daten auszugeben.

+1

Es ist eine gute Übung, immer die Streams zu schließen, jedenfalls mein Kudos :) –

0

Ich habe in der Vergangenheit mit dieser Bibliothek Umsetzungsfragen hätte, würde ich Ihnen empfehlen, von Apache commons an einer anderen bzip2 Umsetzung zu suchen. Die Migration sollte nicht komplex sein (ersetzen Sie CBZip2OutputStream -> BZip2CompressorOutputStream und Sie sollten gehen).

+0

Versucht dies. aber meine Lösung führt schließlich zum Erfolg. – Bigbohne