通信データ量が多いAdobe AIRアプリケーションに対して、圧縮機能を使わなくて直接データを送受信すると効率方面もよくないし、無駄なリソースも必要となりました。
ByteArray クラスは、バイトレベルでデータにアクセスする必要がある上級の ActionScript 開発者を対象としています。ByteArray クラスには、バイナリデータの読み取り、書き込み、および操作を最適化するメソッドおよびプロパティがあります。該当クラスの「compress():void」というメソッドはzlib 圧縮を使用して、バイト配列を圧縮します。
圧縮すると通信データ量も小さくとなって、スペードをアップすることができますね。以下はActionScriptとJavaの圧縮データ通信のサンプルソースコードです。
ここからはActionScriptのソース:
- <mx:RemoteObject id=”SendData” destination=”SendData”/>
- <mx:Script>
- <![CDATA[
- import flash.utils.*;
- private function send():void{
- var testString:String =
- "Test - Alice in Wonderland";
- var bytes:ByteArray = new ByteArray();
- bytes.writeUTF((testString));
- bytes.compress(CompressionAlgorithm.ZLIB);
- SendData.sendData(bytes);
- }
- ]]>
- </mx:Script>
下記はサーバ側受信用Javaソース:
- public void sendData(byte[] bytes) throws Exception{
- Inflater decompresser = new Inflater();
- decompresser.setInput(bytes, 0, bytes.length);
- ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
- byte[] result = new byte[1024];
- while(!decompresser.finished()){
- int resultLength = decompresser.inflate(result);
- bos.write(result,0,resultLength);
- }
- decompresser.end();
- DataInputStream ddd = new DataInputStream(new ByteArrayInputStream(bos.toByteArray()));
- try{
- while(true){
- System.out.println(ddd.readUTF());
- }
- }catch(EOFException e){
- }
- }
下記はremoting-config.mxlの定義例:
- <destination id=”SendData”>
- <channels>
- <channel ref=”my-amf”/>
- </channels>
- <properties>
- <source>
- test.SendData
- </source>
- <scope>application</scope>
- </properties>
- <adapter ref=”java-object” />
- </destination>
メインコンテンツEND ■
Posted on Saturday, 1st November 2008 by admin
Tags: AIR, ByteArray, compress, Java, ZIP
Posted in AIR | Comments (0) | 1,950 views
