2017-04-08 58 views
0

我需要解压缩从互联网下载的文本文件,大约256 kB压缩,提取时大约2 mB。 Linux file实用程序告诉我它“压缩了16位数据”。展望它,我发现compress使用LZW算法。 7-zip表示文件的“类型”是“Z”(扩展名也是如此),并且能够在没有任何问题的情况下对文件进行解压缩,所以问题不在文件中。我也知道问题不在于我如何下载文件,因为压缩字节流与打开十六进制编辑器时显示的字节相匹配。为什么我不能在Android上使用Java解压缩这个LZW文件?

该文件本身是加拿大环境局的一个纯文本临近预报矩阵文件。不幸的是,我没有足够的信誉来添加另一个链接。

我一直无法找到任何内置的LZW解码器,所以我不得不诉诸使用第三方库。其中有很多,但我迄今为止所尝试的都没有能够解压缩文件。

lzwj - 投掷IndexOutOfBoundsException: Invalid index 40223, size is 256。 (索引本身并不重要)。然而,默认的码字长度是12.我已经改变了源代码字长度为16,因为file的输出似乎表明(在这个假设中,我错了吗?),但它会抛出相同的异常(显示的索引在错误中的代码字长度为16)。

This algorithm还经过几次修改以获取输入流而不是文件后,会引发索引超出范围异常。但是,由于它似乎是由学生写作的作业,所以无论如何我都不习惯使用它。

This library不幸的是只有一个compress方法,并没有做解压缩。

7-zip JBinding似乎是我最好的选择,但不幸的是,它似乎并不适用于Android,无论是使用全平台的jar还是仅使用ARM的jar。

我遇到了更多的图书馆和个人课程源文件,但他们没有与他们相关的许可证,我避免使用受版权保护的代码。

任何人都可以帮助我找出这些错误的原因,或提供替代解决方案吗?

+0

你有没有尝试过Apache Commons Compress:https://commons.apache.org/proper/commons-compress/和http://stackoverflow.com/questions/36282358/android-7zip-a-folder-using-apache -commons-compress –

+0

谢谢,完美的作品!我不知道如何在我的雷达下飞行,我甚至没有在这里提到任何其他LZW相关问题。 – andrej88

回答