微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AS3的 XML二进制化

现在json比较的流行,但是xml有自己的优势,各位读者可以到google/baidu 上面去看看他们的区别.现在我以XML文件为例,讲讲怎样将XML文件变成二进制的压缩文件.

以前习惯使用xml文件作为AS3的外部配置文件,它他来的好处是有的,比如分步式加载SWF美术资源文件,lang语言配置文件,Png动画文件等等,但是它任然有他的缺陷:1,xml在大型的游戏中,往往文件过大,这个或多或少的拖延了加载的进度;2,有的时候我们希望我们所配置的XML文件等够保密,可是就像你想的xml可读性太强了,连一些没学过编程的门外汉都或多或少的知道其中的一些端倪,安全性堪忧啊...

j_0013.gif


但是,如果将XML文件转化成二进制的文件,上述的2个问题,那都不是问题了

好了,解决问题:

netIp.xml

<?xml version="1.0" encoding="utf-8"?>
<xml>
    <ips>
        <sign type="http" ip="http://192.168.1.108" port="8080"/>
        <sign type="socket" ip="192.168.1.102" port="6999"/>
    </ips>
</xml>

接下来将其转化成二进制文件: netIp.bin 这个是我自己命的名

package com.ainy.xmlbyte{
    import flash.events.Event;
    import flash.net.FileReference;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    /**
     * 将XML文件转化成2进制文件
     * @author Ainy
     * */
    public  class Xml2Bytes{
        public  function Xml2Bytes(){
        }
        public static  function onXml($path : String) : void{
            var $loader : URLLoader = new URLLoader();
            $loader.addEventListener(Event.COMPLETE,__onComleteLoaded,false,true);
            $loader.load(new URLRequest($path));
        }
        private static  function __onComleteLoaded($e : Event ) : void{
            var $str : String = String($e.target.data);
            trace("我得到的XML ( string ) =>" + $str);
            var $bytesData : ByteArray = new ByteArray();
            $bytesData.writeUTFBytes($str);
            $bytesData.compress();
            new FileReference().save($bytesData,"netIp.bin");          //保存二进制文件
        }
                                              
    }
}

运行以后会弹出:

143854438.jpg

保存一下就行了

接下来,将二进制文件转化成XML

package com.ainy.xmlbyte{
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    /**
     * 将2进制文件还原成Xml
     * @author Ainy
     * */
    public  class Bytes2Xml{
        public  function Bytes2Xml(){
        }
        public static function onBytes($path : String ) : void{
            var $loader : URLLoader = new URLLoader();
            $loader.dataFormat = URLLoaderDataFormat.BINARY;
            $loader.addEventListener(Event.COMPLETE,__onCompleteLoaded,true);
            $loader.load(new URLRequest($path));
        }
        private static function __onCompleteLoaded($e : Event): void{
            var data : * = URLLoader($e.target).data;
            if(data is ByteArray){
                try{
                    ByteArray(data).uncompress();           //解压
                    var xml : XML = XML(data);
                    trace("我得到的XML => "+ xml);
                }catch( $$e : Error){}
            }else{
                trace("加载文件并非二进制文件");
            }
                              
        }
    }
}

得到的结果

144255520.jpg

实际上Json也可以实现类似的转换,不过我习惯了用XML做外部的配置文件.感兴趣的读者可以试一下.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。