首先我们要准备用于读写的数据模型:
数据模型要实现
decode (用于解码)
encode(用于写入)
public class Vo_history
{
public var cmd:int;
public var data:Array;
public var des:String;
public var type:String;
public var time:int;
public var num:uint = 1;
public function decode(info:Array):void
{
cmd = info[0];
data = info[1];
des = info[2];
type = info[3];
time = info[4];
num = info[5];
}
public function encode():Array
{
var info:Array = [];
info.push(cmd);
info.push(data);
info.push(des);
info.push(type);
info.push(time);
info.push(num);
return info;
}
public function clone():Vo_history
{
var vo_clone:Vo_history = new Vo_history();
vo_clone.cmd = this.cmd;
vo_clone.des = this.des;
vo_clone.type = this.type;
vo_clone.time = this.time;
vo_clone.num = this.num;
//数组拷贝
var byteArr:ByteArray = new ByteArray();
byteArr.writeObject(this.data);
byteArr.position = 0;
vo_clone.data = byteArr.readObject();
return vo_clone;
}
}
原理是利用ByteArray中的writeObject写入数组进行保存
public function toByte():ByteArray
{
var byte:ByteArray = new ByteArray();
var saveArr:Array = [];
for each(var child:historyItem in SeachList)
{
var hvo:Vo_history = child.vo;
saveArr.push(hvo.encode());
}
byte.writeObject(saveArr);
return byte;
}
然后保存文件
private function onSaveFile(evt:MouseEvent):void
{
var file:FileReference = new FileReference();
file.save(model.toByte(), "historyList.gm");
}
打开文件
private function onOpenFile(evt:MouseEvent):void
{
var docFilter:FileFilter = new FileFilter("DataFiles (*.gm)", "*.gm");
openFile.browse([docFilter]);
}
private function addHandler(e:Event):void
{
openFile.load();
}
private function comHandler(e:Event):void
{
if (e.target.type == ".gm")
{
var byteArray:ByteArray = e.target.data;
model.parseByte(byteArray);
}
}
解析二进制文件
//解析数据
public function parseByte(byte:ByteArray):void
{
var saveArr:Array = byte.readObject();
for each(var info:Array in saveArr)
{
var hvo:Vo_history = new Vo_history();
hvo.decode(info);
this.append(hvo);
}
}
当然也可以自己定义ByteArray的写入和写出方法,这个跟服务器和客户端通讯的道理是一样的。
Tips : Dictionary 和 Array 一样是可直接写入和写出的表。
Tips2:利用二进制解析某些文件也可以把数据保存成你想要的表。
Tips3:利用Excel解码编码库可以把Excel里面的行和列写成二维Dictionary供游戏中读取使用
一般是key为表的第一列 行为value 通过Excel解码数据然后保存在一个一个Array行数据在Dictionary里面。
附带一个SWF内嵌二进制的代码:
[Embed(source="../bin-debug/assets/robotAction.gm",mimeType="application/octet-stream")]
public var robotData:Class;
var robtAction:ByteArray = new robotData();