现在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,0,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,false,0,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做外部的配置文件.感兴趣的读者可以试一下.
转载于:https://blog.51cto.com/aonaufly/1306255