zlib的未知压缩方法

时间:2013-06-11 20:26:51

标签: java zlib compression

我在解压缩应该使用zlib压缩atm的文件时遇到问题。 该文件是一个icecache文件

这来自文档:

  

缓存文件是基于每个对象和每个帧创建的。每个文件   是一个zip存档,利用ZLIB库直接保存和加载   使用压缩流。   位于:   http://softimage.wiki.softimage.com/index.php?title=Icecache_File_Format

我使用了stackoverflow中的代码: Zlib compression Using Deflate and Inflate classes in Java

我抛弃了main方法并将代码作为java文件添加到处理(java方言)。

所以我有

void setup() { 
  File compressed = new File(sketchPath+"/pc_oj_simple_AnimTake1_11.icecache");
  println(compressed.exists());

  try {
    ZlibCompression.decompressFile( compressed, new File(sketchPath+"/pc_oj_simple_AnimTake1_11.icecacheDecomp"));
  }
  catch (IOException e) {
    println(e);
  }
}

我收到以下错误: java.util.zip.ZipException:未知压缩方法

这是文件: https://dl.dropboxusercontent.com/u/17630770/temp/pc_oj_simple_AnimTake1_11.icecache.zip

我压缩了一个txt文件并再次解压缩,这很好。

我怎样才能继续弄清楚出了什么问题?

1 个答案:

答案 0 :(得分:0)

虽然你说它是一个zip文件并且你提供了一个zip文件的链接,但你的数据似乎不是一个zip文件。当我解压缩你提供的内容时,我会得到一个 gzip 流。您的代码将解压缩 zlib 流,这是一种不同的格式。

您应该使用GZIPInputStream来读取链接zip文件中的icecache文件。或者如果直接使用zlib,则zlib的gz*函数。

请注意,icecache格式的引用非常混淆了什么格式。它说“每个文件都是一个zip存档”,但接着说“利用ZLIB库直接使用zip-stream保存和加载”。哇,好的。首先,zlib不直接生成或读取zip文件。 zlib为deflate压缩数据格式提供压缩和解压缩服务,该格式可以由处理zip文件格式的软件使用。但是zlib提供了 no 代码来处理zip文件格式(除了源代码分发的contrib /目录中的第三方贡献之外)。沿着这些方向,zlib没有“zip-stream”这样的东西。

那是什么?格式是否真的压缩,你不能单独使用zlib?或者是zlib处理的格式,而不是zip?幸运的是,这可以通过底部提供的示例源代码解决,也可以在icecache.rar下面链接。该python源代码使用 gzip 作为它写入的格式。事实上,zlib支持gzip格式(与zip格式完全不同)。

所提供的示例文件进一步支持了这一结论,当解压缩时,该文件包含gzip流。解压缩时的gzip流以“ICECACHE”开头。

zlib的gz*函数应该用于读取和写入包含记录的icecache数据布局的gzip流。