1

我有一个简单的测试用例在 jzlib 1.0.7 中产生一个确定的 ArrayOutOfBoundException,具体取决于随后写入 ZOutputStream 的同一个实例的数据。

堆栈跟踪:

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 有什么特别的原因吗?我理解使用它的两个主要原因是支持 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 回答