問題

2010-12-05 13 views
0

最初のいくつかのコード:問題

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

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

length = bos.size(); 

"プロバイダ" "ZOS" に(言うことができます)200のバイトを送信します。しかし、lengthは== 1.私はbzipが良いことを知っていますが、1バイトは少し少ないようです。

私は

provider.sendXMLFilelist(bos);長さよりは200

なぜ彼の圧縮されたバイトのすべての出力をCBZip2OutputStreamしない==ているのですか?

私はこの実装を使用しています:http://www.kohsuke.org/bzip2/

答えて

2

私は今答えがあると思います。あなたは.close() bzip2ストリームにする必要があります。 Bzip2はブロックコーデックではなく、データをパディングする必要があるかどうか、またはそれ以上あるかどうかはわかりません。

ストリームを閉じるように指示すると、すべての圧縮データが出力されます。

+1

いつもストリームを閉じるのは良い方法ですが、とにかく私の誇りです:) –

0

私は過去に、このライブラリの実装に問題がありました、私はApache commonsから別のbzip2の実装を見て、あなたをお勧めします。移行は複雑ではありません(CBZip2OutputStream - > BZip2CompressorOutputStreamを置き換えてください)。

+0

これを試してみてください。私のソリューションは最終的に成功につながります。 – Bigbohne