« extends Progression 拡張機能コンテストでアイディア賞受賞 | メイン | Flashでコンシューマー向けのゲームUIが作れるScaleformのセミナーに行って来た »

ActionScript 3.0 でZIPの圧縮と解凍

del.icio.us it!   hatena bookmark
でっかめのテキストデータを扱いたかったので調べてみた。テキストデータってzipにすると結構圧縮されるんよね。

ライブラリはこちらを使ってみた。
AS3 Zip Library Release « nochump.com
http://nochump.com/blog/?p=15

圧縮は結構速いけど、解凍は結構時間かかる感じ。5MBくらいのテキストデータで、圧縮は1秒くらいだけど解凍に3秒以上かかった。(時間に関しては環境に依存すると思います)

今回はテキストの圧縮、解凍だけど、基本的にはどんなファイルでも圧縮解凍できるはず。

[追記 2009/6/18]
書き忘れてたけど、このzipライブラリは非同期で走らないので、3秒くらい解凍にかかるってことは3秒間いっさいの処理が止まるってこと。なのあまり実用的でないんでないかという結論に達しそうな今日この頃。
非同期なやつが欲しいです。

圧縮
var fileName:String = "foge.txt"; // 圧縮するファイルの名前
var fileData:ByteArray = new ByteArray(); // 圧縮対象のByteArray
fileData.writeUTF("圧縮したいテキストデータを"); // 今回はテキスト
var zipOut:ZipOutput = new ZipOutput();
var ze:ZipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(ze);
zipOut.write(fileData);
zipOut.closeEntry();
zipOut.finish();
var zipData:ByteArray = zipOut.byteArray; // 圧縮したzipのByteArray

// ダウンロード
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
    var file:FileReference = new FileReference();
    file.save(zipData, "hoge.zip");
});

解凍
var data:ByteArray = _loader.data; // _loader.dataはURLLoaderでとってきたzipデータ
var zip:ZipFile = new ZipFile(data);

// zipの中には複数のファイルがあるかもしれん
for (var i:int = 0; i<zip.entries.length; i++)
{
    var entry:ZipEntry = zip.entries[i];
    var zd:ByteArray = zip.getInput(entry);
    trace(zd.toString());
}


Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] 集合知プログラミング ビジュアライジング・データ —Processingによる情報視覚化手法 御岳百草丸 1200T

トラックバック

このエントリーのトラックバックURL:
http://un-q.net/mt-tb.cgi/405

コメントを投稿

書いたよ!