为啥我不能在 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显示图片,可是显示不了,想问下为啥?要怎么弄?代码如下