我正在尝试解压缩使用 Jean-loup Gailly 在 1990 年代编写的 ZLIB 库压缩的数据。我认为它是一个流行的库(我看到很多程序都提供它使用的 zlib32.dll 文件)所以我希望有人对它足够熟悉以帮助我。我直接使用 compress() 函数,从我读到的内容使用 rfc-1951 DEFLATE 格式。
这是我用来从流中读取一些压缩数据并解压缩的代码段:
InputStream is = new ByteArrayInputStream(buf);
//GZIPInputStream gzis = new GZIPInputStream(is);
InflaterInputStream iis = new InflaterInputStream(is);
byte[] buf2 = new byte[uncompressedDataLength];
iis.read(buf2);
iis.read(buf2) 函数引发“数据格式错误”的内部异常。我也尝试使用 GZIPInputStream ,但这也会引发相同的异常。
“buf”变量是 byte[] 类型,我通过调试确认它与我的 C 程序从 ZLIB compress() 函数返回的相同(实际数据来自 TCP 上的服务器)。“uncompressedDataLength”是由 C 程序(服务器)提供的未压缩数据的已知大小。
有没有人尝试过使用这个库读取/写入数据,然后使用 Java 在 Android 上读取/写入相同的数据?
我确实在一些地方找到了“ZLIB 的纯 Java 端口”,如果需要,我可以尝试,但如果可能的话,我宁愿使用内置/OS 函数。