[ Performance - Write ] ByteArray.writeObject vs JSON.encode

by clockmaker
♥6 | Line 45 | Modified 2010-07-20 02:02:27 | MIT License
play

ActionScript3 source code

/**
 * Copyright clockmaker ( http://wonderfl.net/user/clockmaker )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5InF
 */


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" addedToStage="setup()">
    <mx:Script>
        <![CDATA[
            import com.adobe.serialization.json.JSON;
            import mx.utils.Base64Encoder;
            import jp.nium.utils.ClassUtil;
            private static const MAX:Number = 5000;
            private var array:Array = [];
            
            protected function calc():void {
                var log:Array = [], old:int;
                // --
                log.push("各テスト " + MAX + " 個の Point インスタンスを格納した配列を\n保存可能なデータに変換した場合の計算結果 [単位 : ミリ秒]");
                log.push("(誤差は多少生じます)");
                log.push("");
                // --
                old = getTimer();
                registerClassAlias(ClassUtil.getClassPath(Point), Point);
                var ba2:ByteArray = new ByteArray();
                ba2.writeObject(array);
                log.push("ByteArray.writeObject() -> " + (getTimer() - old) + " ms (output is ByteArray)");
                // --
                old = getTimer();
                registerClassAlias(ClassUtil.getClassPath(Point), Point);
                var ba:ByteArray = new ByteArray();
                ba.writeObject(array);
                var enc:Base64Encoder = new Base64Encoder();
                enc.encodeBytes(ba);
                var str:String = enc.toString();
                log.push("ByteArray.writeObject() + Base64 Encode -> " + (getTimer() - old) + " ms (output is String)");
                // --
                old = getTimer();
                JSON.encode(array);
                log.push("JSON.encode() -> " + (getTimer() - old) + " ms (output is String)");
                // --
                log.push("");
                log.push("結果については言及しませんので, 各自ご判断ください.");
                ta.text = log.join("\n");
            }
            
            protected function setup():void {
                for (var i:int = 0; i < MAX; i++) {
                    array[ i ] = new Point(MAX * Math.random(), MAX * Math.random());
                }
                calc();
            }
        ]]>
    </mx:Script>
    <mx:Button label="Re Calculation" click="calc()"/>
    <mx:TextArea id="ta" editable="false" width="100%" height="100%"/>
</mx:Application>