1

ZOutputStream の同じインスタンスに後で書き込まれたデータに応じて、jzlib 1.0.7 で特定の ArrayOutOfBoundException を生成する簡単なテスト ケースがあります。

スタックトレース:

java.lang.ArrayIndexOutOfBoundsException: 587
    at com.jcraft.jzlib.Tree.d_code(Tree.java:149)
    at com.jcraft.jzlib.Deflate.compress_block(Deflate.java:691)
    at com.jcraft.jzlib.Deflate._tr_flush_block(Deflate.java:897)
    at com.jcraft.jzlib.Deflate.flush_block_only(Deflate.java:772)
    at com.jcraft.jzlib.Deflate.deflate_slow(Deflate.java:1195)
    at com.jcraft.jzlib.Deflate.deflate(Deflate.java:1567)
    at com.jcraft.jzlib.ZStream.deflate(ZStream.java:133)
    at com.jcraft.jzlib.ZOutputStream.write(ZOutputStream.java:102)
    at com.jcraft.jzlib.JZLibTestCase.main(JZLibTestCase.java:51)
       at JZLibTestCase.main(JZLibTestCase.java:28)

この問題はめったに発生せず、jzlib から開いている ZOutputStream にその後書き込まれるデータに依存します。

これを修正する方法のヒントはありますか?これについて聞いたことがありますか?

4

2 に答える 2

1

私が言える限りでは、JZlib にバグが見つかった可能性があります。周りを検索しているときに、ソース ファイルとデータ ファイルが添付された投稿がある他の場所に出くわしました。あなたが何か間違ったことをしているようには見えません。任意のバイト シーケンスを にストリーミングできる必要がありますZOutputStream

JZlib を使用している特定の理由はありますか? これを使用する主な 2 つの理由は、Z_PARTIAL_FLUSH モードとライセンスのサポートです。そのフラッシュ モードが必要なく、Oracle JVM を使用している場合は、付属のDeflaterOutputStream. コードでこれを置き換えるとZOuputStream、例外なく機能します。

于 2011-04-14T01:54:43.077 に答える
0

jzlib を使用して同僚に尋ねた具体的な理由は見つかりませんでしたが、マルチプロセッサ システムの JRE 1.4 で java.util.zip を使用したときにバグがあったことは確かですが、誰も教えてくれませんでした。具体的にどっち。それ以来、私たちは jzlib を使用してきました。これは長年にわたってうまく機能しています。ほとんどの場合、すでに修正されています。それにもかかわらず、java.util.zip を使用すると、jzlib が失敗したのと同じように、単純なテスト データで動作します。これは本当です。

于 2011-04-15T06:54:01.323 に答える