现在json比较的流行,但是xml有自己的优势,各位读者可以到google/baidu 上面去看看他们的区别.现在我以XML文件为例,讲讲怎样将XML文件变成二进制的压缩文件.
以前习惯使用xml文件作为AS3的外部配置文件,它他来的好处是有的,比如分步式加载SWF美术资源文件,lang语言配置文件,Png动画文件等等,但是它任然有他的缺陷:1,xml在大型的游戏中,往往文件过大,这个或多或少的拖延了加载的进度;2,有的时候我们希望我们所配置的XML文件等够保密,可是就像你想的xml可读性太强了,连一些没学过编程的门外汉都或多或少的知道其中的一些端倪,安全性堪忧啊...
但是,如果将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"); //保存二进制文件 } } }
运行以后会弹出:
保存一下就行了
接下来,将二进制文件转化成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("加载文件并非二进制文件"); } } } }
得到的结果
实际上Json也可以实现类似的转换,不过我习惯了用XML做外部的配置文件.感兴趣的读者可以试一下.