Flashで大きめのデータを扱うときに、圧縮したいことなんかがあるんだけど、とりあえず思いつくのがZIPのライブラリ。以前ちょっと紹介したりしました。
ActionScript 3.0 でZIPの圧縮と解凍 (Unknown Quality)
http://un-q.net/2009/06/actionscript_30_zip_as3.html
上のエントリーにも書いたんだけど、解凍が結構時間かかる。そんなときはByteArrayクラスのcompressメソッドがおすすめ。
こんな風に使えます。
たとえばcollada形式の3Dモデルデータを読み込むときなんかに使えます。colladaはXML形式のデータなので圧縮すると結構容量が減ります。まずcolladaのXMLをFlashに読み込みByteArrayにしてcompressして、それをファイルとして保存してしまいます。コンテンツではその保存したデータを読み込んでuncompressして使う感じです。
こんな感じで読み込み用のデータを作ります。
ちなみに7MBほどのデータを処理したときの結果。解凍の速度が圧倒的に違います。
※ZIPのライブラリはnochump.util.zipの物を使ってます。
[追記]
ZIP圧縮と圧縮率が変わらないのは、FlashPlayerでのcompressはzlibのアルゴリズムを使ってるからです。AIRだと圧縮のアルゴリズムを変更することが出来ます。詳しくはドキュメント読んでください。
ByteArray - ActionScript 3.0 言語およびコンポーネントリファレンス
ActionScript 3.0 でZIPの圧縮と解凍 (Unknown Quality)
http://un-q.net/2009/06/actionscript_30_zip_as3.html
上のエントリーにも書いたんだけど、解凍が結構時間かかる。そんなときはByteArrayクラスのcompressメソッドがおすすめ。
こんな風に使えます。
var data:ByteArray = new ByteArray();
data.writeUTF("hogehogehoegho.....");
data.compress() // 圧縮
data.uncompress() // 解凍
たとえばcollada形式の3Dモデルデータを読み込むときなんかに使えます。colladaはXML形式のデータなので圧縮すると結構容量が減ります。まずcolladaのXMLをFlashに読み込みByteArrayにしてcompressして、それをファイルとして保存してしまいます。コンテンツではその保存したデータを読み込んでuncompressして使う感じです。
こんな感じで読み込み用のデータを作ります。
// URLLoaderでcolladaのデータを読み込む
// ここはURLLoaderのEvent.COMPLETEハンドラ内
// _loaderがURLLoader
var b:ByteArray = new ByteArray();
b.writeUTFBytes(_loader.data); // _loader.dataにcolladaのXMLデータ
b.compress();
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
var file:FileReference = new FileReference();
file.save(b, "filename.dat");
});
ちなみに7MBほどのデータを処理したときの結果。解凍の速度が圧倒的に違います。
※ZIPのライブラリはnochump.util.zipの物を使ってます。
start zip compress end zip compress 1877ms start zip uncompress end zip uncompress 3736ms start ByteArray compress end ByteArray compress 1178ms start ByteArray uncompress end ByteArray uncompress 36ms画像のデータとかはあまり圧縮できないですね。ZIPでもそれは同じだと思います。あと圧縮率はテキストの場合ZIPでもByteArrayのcompressでも大きな差はありませんでした。
[追記]
ZIP圧縮と圧縮率が変わらないのは、FlashPlayerでのcompressはzlibのアルゴリズムを使ってるからです。AIRだと圧縮のアルゴリズムを変更することが出来ます。詳しくはドキュメント読んでください。
ByteArray - ActionScript 3.0 言語およびコンポーネントリファレンス
![Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]](http://ecx.images-amazon.com/images/I/617sNhK9P9L._SL160_.jpg)



