为啥我不能在 Android 上用 Java 解压这个 LZW 文件?

Posted

技术标签:

【中文标题】为啥我不能在 Android 上用 Java 解压这个 LZW 文件?【英文标题】:Why can't I decompress this LZW file in Java on Android?为什么我不能在 Android 上用 Java 解压这个 LZW 文件? 【发布时间】:2017-04-08 02:39:46 【问题描述】:

我需要解压缩从 Internet 下载的文本文件,压缩后约为 256 kB,解压缩时约为 2 mB。 Linux file 实用程序告诉我它是“16 位压缩数据”。调查了一下,我发现compress 使用了 LZW 算法。 7-zip 表示文件的“类型”是“Z”(扩展名也是如此),并且能够毫无问题地解压缩文件,因此问题不在文件中。我也知道问题不在于我如何下载文件,因为压缩字节流与打开十六进制编辑器时显示的字节匹配。

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

我一直找不到任何内置的 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。

我遇到了更多的库和单独的类源文件,但它们没有与之关联的许可证,我正在避免受版权保护的代码。

谁能帮我找出这些错误的原因,或提供替代解决方案?

【问题讨论】:

您是否尝试过 Apache Commons Compress:commons.apache.org/proper/commons-compress 和 ***.com/questions/36282358/… 谢谢,完美!我不知道它是如何在我的雷达下飞行的,我什至没有看到这里提到的任何其他与 LZW 相关的问题。 【参考方案1】:

您可以尝试提取并使用unlzw() routine in pigz。

【讨论】:

以上是关于为啥我不能在 Android 上用 Java 解压这个 LZW 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上用 Java 获取 SQLite SUM

为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?

为啥 JDBC 代码在 Java 中可以工作,但在 Android 中返回 null?

我想在java中的JLabel上用html显示图片,可是显示不了,想问下为啥?要怎么弄?代码如下

为啥 lib 模块不能在 android studio 中包含第三个 lib

解压后的Windows Server 2003 ISO文件为啥不能安装?