FAILED_TO_UNCOMPRESS (5) с Snappy на конвейере Had oop - как отлаживать? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть бережливая структура, в которой есть поле, которое я использую для переноса двоичных данных. Я сериализую данные с помощью протокола Thrift Compact Protocol, а затем сжимаю их с помощью Snappy, прежде чем устанавливать это поле. Вся бережливая структура перетекает в конвейер Had oop. В моем задании по завариванию это поле используется для распаковки, и именно тогда происходит ошибка FAILED_TO_UNCOMPRESS (5) .

Ниже приводится часть стека вызовов:

org.xerial.snappy.SnappyNative.throw_error(SnappyNative.java:98)
org.xerial.snappy.SnappyNative.rawUncompress(Native Method)
org.xerial.snappy.Snappy.rawUncompress(Snappy.java:474)
org.xerial.snappy.Snappy.uncompress(Snappy.java:513)
org.xerial.snappy.SnappyInputStream.readFully(SnappyInputStream.java:147)
org.xerial.snappy.SnappyInputStream.readHeader(SnappyInputStream.java:99)
org.xerial.snappy.SnappyInputStream.<init>(SnappyInputStream.java:59)

Код Это вызывает исключение в следующей строке:

SnappyInputStream inputStream = new SnappyInputStream(byteArrayInputStream);

Родительский сберегательный фонд был сериализован / десериализован с использованием протокола двоичного сбережения. Я прекрасно читаю все остальные поля. Я попытался отладить эту проблему, но поскольку код, который генерирует исключение, находится в собственном коде C ++, мне кажется, что я не могу перейти к ним из IntelliJ.

Глядя на Snappy-код, кажется, что у них есть какая-то версия Java, которая не использует C ++.

Если так, я хотел бы получить совет о том, как ее использовать, чтобы я мог воспроизвести и понять, как решить эту проблему с помощью отладчика. Или, если есть другой способ отладки, сообщите мне!

...