2010年3月10日水曜日

zlib形式で圧縮したデータをAS3.0で読み込む

Flashとwebサーバとのやりとりで、圧縮+暗号化を利用して欲しいという話がありました。調べてみたところ、Flash Player は標準で zlib アルゴリズムのみサポートしているとの事なので、それを利用することにします。Adobe AIR は、deflate アルゴリズム(GZIP などで用いられるらしい)も、利用することが出来るようです。

  1. package   
  2. {  
  3.  import flash.display.Sprite;  
  4.  import flash.events.Event;  
  5.  import flash.net.URLLoader;  
  6.  import flash.net.URLLoaderDataFormat;  
  7.  import flash.net.URLRequest;  
  8.   
  9.  public class Main extends Sprite   
  10.  {  
  11.   
  12.   public function Main():void   
  13.   {  
  14.    var req:URLRequest = new URLRequest("compress_sample.php");  
  15.    var loader:URLLoader = new URLLoader(req);  
  16.      
  17.    // ダウンロードするデータ形式をバイナリに指定する。  
  18.    loader.dataFormat = URLLoaderDataFormat.BINARY;  
  19.      
  20.    loader.addEventListener(Event.COMPLETE, function(event:Event):void   
  21.    {  
  22.     try {  
  23.      // zlib形式で圧縮されたデータを解凍する。  
  24.      loader.data.uncompress();  
  25.     } catch (e:Error) {  
  26.      trace(e.message);  
  27.     }  
  28.     var str:String = loader.data;  
  29.     trace(str);  
  30.    });  
  31.      
  32.    loader.load(req);  
  33.   }  
  34.  }  
  35. }  

今回はwebサーバはPHPを利用するので、PHPでの例は以下の通り。

  1. $message = gzcompress('このメッセージを圧縮して返します。', 9);  
  2.   
  3. header('Content-Type: application/x-gzip');  
  4.   
  5. echo $message;  

返信するデータは、JSON 形式などでも同様に扱うことができます。XML 形式でも多分一緒と思います。

0 件のコメント:

コメントを投稿