Мне нужно распаковать текстовый файл, который я загружаю из Интернета, около 256 КБ в сжатом виде и 2 МВ при извлечении. Утилита Linux file
говорит мне, что это «сжатые данные 16 бит». Изучив его, я обнаружил, что compress
использует алгоритм LZW. 7-zip говорит, что «тип» файла «Z» (как и его расширение), и может распаковать файл без каких-либо проблем, поэтому проблема не в файле. Я также знаю, что проблема не в том, как я загружаю файл, поскольку поток сжатых байтов совпадает с байтами, отображаемыми при открытии шестнадцатеричного редактора.
Сам файл представляет собой обычный текстовый файл матрицы прогноза текущей погоды от Environment Canada. К сожалению, у меня недостаточно репутации, чтобы добавить еще одну ссылку.
Мне не удалось найти встроенных декодеров LZW, поэтому мне пришлось прибегнуть к использованию сторонних библиотек. Их довольно много, но ни один из тех, что я пробовал до сих пор, не смог распаковать файл.
lzwj - бросает IndexOutOfBoundsException: Invalid index 40223, size is 256
. (Сам индекс не очень важен). Однако длина кодового слова по умолчанию равна 12. Я изменил исходный код, чтобы он имел длину кодового слова 16, на что, по-видимому, указывает вывод file
(я ошибаюсь в этом предположении?), но он выдает то же исключение (показанный индекс в ошибке для длины кодового слова 16).
Этот алгоритм также выдает исключение выхода индекса за границы после нескольких модификаций для получения входных данных. поток вместо файла. Однако, поскольку это, похоже, было написано студентом для задания, мне все равно неудобно его использовать.
Эта библиотека, к сожалению, имеет только метод compress
, и не делает декомпрессию.
7-zip JBinding казался моим лучшим выбором, но, к сожалению, он не работает на Android, ни с jar для всех платформ, ни с jar только для ARM.
Я наткнулся еще на пару библиотек и исходных файлов отдельных классов, но у них нет лицензии, связанной с ними, и я избегаю защищенного авторским правом кода.
Может ли кто-нибудь помочь мне выяснить причину любой из этих ошибок или предоставить альтернативное решение?