我在解压缩应该使用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文件并再次解压缩,这很好。
我怎样才能继续弄清楚出了什么问题?
答案 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流。