0

atm で圧縮すべきファイルを zlib で解凍する際に問題があります。ファイルはicecacheファイルです

これはドキュメントからのものです:

キャッシュ ファイルは、オブジェクトごとおよびフレームごとに作成されます。各ファイルは zip アーカイブであり、ZLIB ライブラリを利用して、zip ストリームを使用して直接保存およびロードします。場所: http://softimage.wiki.softimage.com/index.php?title=Icecache_File_Format

私はスタックオーバーフローのコードを使用しました: 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ストリームを解凍します。

リンクされた zip ファイルにある icecache ファイルを読み取るには、GZIPInputStream を使用する必要があります。または、zlib を直接使用する場合は、zlib のgz*関数。

icecache 形式の参照は、どの形式が何なのかについてひどく混乱していることに注意してください。「各ファイルはzipアーカイブです」と書かれていますが、「ZLIBライブラリを利用して、zipストリームを使用して直接保存およびロードする」と述べています。うわー、わかりました。まず、zlib は zip ファイルを直接生成したり読み取ったりしません。zlib は、zip ファイル形式を処理するソフトウェアで使用できる deflate 圧縮データ形式の圧縮および解凍サービスを提供します。しかし、zlib はzip ファイル形式を処理するためのコードを提供していません (ソース配布の contrib/ ディレクトリにあるサードパーティの寄稿にあるものを除いて)。これらの線に沿って、zlib には「zip ストリーム」のようなものはありません。

それで、それは何ですか?フォーマットは本当に zip で、zlib を単独で使用することはできませんか? または、フォーマットはzlibが処理するものであり、zipではありませんか? 幸いなことに、これは下部にあるサンプル ソース コードと、その下の icecache.rar にリンクされているサンプル ソース コードで解決できます。その python ソース コードは、書き込み先の形式としてgzipを使用します。実際、zlib は gzip 形式をサポートしています (これは zip 形式とはまったく異なります)。

この結論は、解凍時に gzip ストリームを含む、提供されているサンプル ファイルによってさらに補強されます。解凍時の gzip ストリームは「ICECACHE」で始まります。

zlib のgz*関数を使用して、文書化されたデータの icecache レイアウトを含む gzip ストリームを読み書きする必要があります。

于 2013-06-11T22:39:05.077 に答える