jzlib 1.0.7: ArrayOutOfBoundException в ZOutputStream.write () - PullRequest
1 голос
/ 13 апреля 2011

У меня есть простой тестовый пример, создающий уверенную ArrayOutOfBoundException в jzlib 1.0.7 в зависимости от данных, впоследствии записанных в один и тот же экземпляр ZOutputStream.

StackTrace:

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)

Проблема возникает очень редко и зависит от данных последовательно записывается в открытый ZOutputStream из jzlib.

У вас есть подсказка, как это исправить? Вы когда-нибудь слышали об этом?

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Насколько я могу судить, вы могли найти ошибку в JZlib.При поиске я наткнулся на другие места, в которых есть ваш пост с прикрепленными исходными файлами и файлами данных.Не похоже, что вы делаете что-то не так.Вы должны иметь возможность передавать любую последовательность байтов в ZOutputStream.

. Есть ли какая-то особая причина, по которой вы используете JZlib?Я понимаю, что для его использования есть две основные причины: поддержка режима Z_PARTIAL_FLUSH и лицензирование.Если вам не нужен этот режим сброса, и вы используете Oracle JVM, вам будет хорошо с включенным DeflaterOutputStream.Подстановка его в вашем коде для ZOuputStream работает без исключения.

0 голосов
/ 15 апреля 2011

Я не нашел конкретной причины для использования jzlib, спрашивая моих коллег, но наверняка была ошибка с использованием java.util.zip иногда в JRE 1.4 на многопроцессорных системах, хотя никто не смогсказать мне конкретно, какой.С тех пор мы используем jzlib, который хорошо работает на протяжении многих лет.Скорее всего, это уже исправлено.Тем не менее, использование java.util.zip работает с моими простыми тестовыми данными так же, как и с jzlib, это правда.

...