2013-06-11 91 views
0

解压缩应该使用zlib压缩atm的文件时出现问题。 该文件是一个icecache文件使用zlib的未知压缩方法

这是从文档:

Cache files are created on a per object and per frame basis. Each file is a zip archive, utilizing the ZLIB library to save and load directly using a zip-stream. located at: http://softimage.wiki.softimage.com/index.php?title=Icecache_File_Format

我使用计算器的代码: Zlib compression Using Deflate and Inflate classes in Java

我倒掉出主方法和添加的代码作为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

我ASLO压缩一个txt文件并再次解压缩,这工作得很好。

我该如何继续弄清楚什么是错的?

+0

什么是你试图解压缩文件的计算机体系结构的字节顺序是什么,以及你试图运行程序的计算机体系结构的字节顺序是什么? – statueuphemism

+0

该文件来自Windows,可能是64位,但不确定。我尝试在mac 64位上解压缩它。 – clankill3r

+0

对不起,我要求小端和大端信息。在那些具有小端字节顺序的机器中,很可能是AMD或Intel芯片,所以字节顺序可能不是你的问题。 – statueuphemism

回答

0

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

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

请注意,icecache格式的参考对什么格式是什么造成了极大的困惑。它说“每个文件都是一个zip压缩文件”,但是继续说“利用ZLIB库来直接使用zip-stream进行保存和加载”。哇,好的。所以首先,zlib不会直接生成或读取zip文件。 zlib为压缩和压缩数据格式提供压缩和解压缩服务,该压缩和解压缩服务可以由处理zip文件格式的软件使用使用。但zlib提供了没有的代码来处理压缩文件格式(除了源分布的contrib /目录中的第三方贡献之外)。沿着这些路线,zlib没有“zip-stream”这样的东西。

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

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

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

+0

你是否肯定他想要的是ZipFile类?您是否肯定他在将文件放入Dropbox之前不会将其压缩?虽然压缩压缩文件可能相当多余,但他没有在“File compressed = new File(sketchPath +”/ pc_oj_simple_AnimTake1_11.icecache“)行中引用任何文件扩展名;' – statueuphemism

+0

您是对的。我查看了解压缩文件,它本身就是一个_gzip_流。 –

+0

文件扩展名为.icecache 根据官方参考,它应该是zlib。发送文件的人将所有这些文件压缩在一起。那么他的拉链是否会打破zlib? – clankill3r