Flashとwebサーバとのやりとりで、圧縮+暗号化を利用して欲しいという話がありました。調べてみたところ、Flash Player は標準で zlib アルゴリズムのみサポートしているとの事なので、それを利用することにします。Adobe AIR は、deflate アルゴリズム(GZIP などで用いられるらしい)も、利用することが出来るようです。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
var req:URLRequest = new URLRequest("compress_sample.php");
var loader:URLLoader = new URLLoader(req);
// ダウンロードするデータ形式をバイナリに指定する。
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, function(event:Event):void
{
try {
// zlib形式で圧縮されたデータを解凍する。
loader.data.uncompress();
} catch (e:Error) {
trace(e.message);
}
var str:String = loader.data;
trace(str);
});
loader.load(req);
}
}
}
今回はwebサーバはPHPを利用するので、PHPでの例は以下の通り。
$message = gzcompress('このメッセージを圧縮して返します。', 9);
header('Content-Type: application/x-gzip');
echo $message;
返信するデータは、JSON 形式などでも同様に扱うことができます。XML 形式でも多分一緒と思います。