Archive for 2009/8/17

以前、ByteArray.uncompress()でいろいろな解凍に失敗するということを書きましたが、

間違っていました。

完全なるzipの構造データの読み間違いでした。

何を間違ったかといえば、zipファイルの構造は

  • local file header (ヘッダ部分)
  • data ( データ本体)
    –  ファイル分だけ繰り返し -
  • central directory
    -  ファイル分だけ繰り返し -
  • end of central directory record

のような感じになっています。

ここで、central directoryのデータと、local file headerのデータ構造はほぼ一緒で、また、データもほぼ一緒です。

したがって、私が作ったzipライブラリはこのcentral directory を後ろから探してファイルの情報を見ています。

たまーに拡張部分のデータが異なるのです。
しかし、ほぼ一緒ではなく“完全に同じ”としてしまったために、拡張部分のデータがデータ本体に含まれてしまい、
解凍ができなかったというわけです。

試しに、deflate64(version made by = 2.1) のデータもzip64のデータ(version made by 4.5)もきちんと解凍できました。
多分、解凍に必要なバージョン( version needed to extract ) <= 2.0 なら大丈夫なのかなという感じです。

まあ、この辺もdeflate圧縮 ( LZ77 + Haffman法)をひっくり返して勉強してみて、自分が間違っているのだなーという感触を得たので、
たまにコアな部分の勉強も悪くないものです。

というわけで、AIR版圧縮・解凍アプリ(Anzipper)もバージョン 0.85でこれらのバグが治っています。

ちなみにZIPの構造について勉強させてもらった資料は

  1. http://www.pkware.com/documents/casestudies/APPNOTE.TXT
  2. http://www.wankuma.com/seminar/20080823osaka22/Default.aspx
    http://www.wankuma.com/seminar/20080823osaka22/4.pdf

を参考にさせていただきました。

RSS
Add to Google

カスタム検索
ソフトウェア&ライブラリ


ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年8月
« 7月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
アーカイブ
にほんブログ村 IT技術ブログへ