jzlib 1.0.7:ZOutputStream.write()中的ArrayOutOfBoundException

时间:2011-04-13 07:59:09

标签: java jzlib

我有一个简单的测试用例,在jzlib中产生一个确定的ArrayOutOfBoundException 1.0.7取决于随后写入同一个实例的数据 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。

你有提示如何解决这个问题吗?你听说过这个吗?

2 个答案:

答案 0 :(得分:1)

我可以告诉你,可能发现了JZlib的错误。在搜索时,我遇到了其他地方,你的帖子附有源文件和数据文件。你似乎没有做错任何事情。您应该能够将任何字节序列流式传输到ZOutputStream

您使用JZlib是否有特殊原因?我理解使用它的两个主要原因是支持Z_PARTIAL_FLUSH模式和许可。如果您不需要刷新模式并且您正在使用Oracle JVM,那么您应该可以使用包含的DeflaterOutputStream。在ZOuputStream的代码中替换它可以毫无例外地工作。

答案 1 :(得分:0)

我没有找到使用jzlib询问我的同事的具体原因,但是肯定在多处理器系统上使用java.util.zip时出现了一些错误,尽管没有人能够具体地告诉我哪一个。从那时起,我们一直在使用jzlib,它已经运行了很多年。最有可能它已经修复了。尽管如此,使用java.util.zip以我的简单测试数据与jzlib失败的方式相同,这是真的。