0

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

这是来自文档:

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

我使用了来自 stackoverflow 的代码: Zlib 压缩 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文件并再次解压缩,这很好。

我怎样才能继续找出问题所在?

4

1 回答 1

0

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

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

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

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

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

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

于 2013-06-11T22:39:05.077 回答