2013-06-11 56 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