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/

4

2 に答える 2

2

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

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

于 2010-12-06T16:29:26.437 に答える
0

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

于 2010-12-05T17:10:36.013 に答える