我有一个简单的测试用例,在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。
你有提示如何解决这个问题吗?你听说过这个吗?
答案 0 :(得分:1)
我可以告诉你,可能发现了JZlib的错误。在搜索时,我遇到了其他地方,你的帖子附有源文件和数据文件。你似乎没有做错任何事情。您应该能够将任何字节序列流式传输到ZOutputStream
。
您使用JZlib是否有特殊原因?我理解使用它的两个主要原因是支持Z_PARTIAL_FLUSH模式和许可。如果您不需要刷新模式并且您正在使用Oracle JVM,那么您应该可以使用包含的DeflaterOutputStream
。在ZOuputStream
的代码中替换它可以毫无例外地工作。
答案 1 :(得分:0)
我没有找到使用jzlib询问我的同事的具体原因,但是肯定在多处理器系统上使用java.util.zip时出现了一些错误,尽管没有人能够具体地告诉我哪一个。从那时起,我们一直在使用jzlib,它已经运行了很多年。最有可能它已经修复了。尽管如此,使用java.util.zip以我的简单测试数据与jzlib失败的方式相同,这是真的。