我们经常在处理数据的时候,很多情况下都会分解数据,比如,我要发送一个数据(游戏指令),玩家A森林种菜.在Java或者C++中,很多情况是分解字符串String.这个字符串可以写为: a-f-p .其意义为"player A ,space forest ,action plant".只要程序员明白 a-f-p的意义就行了,其余多的数据完全没必要发送,发送也只是浪费资源.通过String.split()函数分解字符串,获得a,就获得操作对象,获得f就获得场景,获得p就明白具体的操作.当然,a-f-p更确切的定义应当是协议而不是指令.因为指令需要具体操作的数据.故完整的指令应当是: a-f-p-1-rose-5.表示的意义就是"玩家A在森林场景的1号土地种下了5束玫瑰";
但,Java与AS之间的数据一般是通过二进制的ByteArray传输的.故分解的不再是String,而是ByteArray了.
如:AS代码分解ByteArray
package cn.vicky.protocol.solution { import flash.utils.ByteArray; public class DecoderProtocol { private var actionProtocolCode:int=0x0; private var typeProtocolCode:int=0x0; private var noteProtocolCode:int=0x0; private var message:ByteArray; public function DecoderProtocol(dataPacket:ByteArray) { this.message=new ByteArray(); dataPacket.position=0; var pakageCount:int=dataPacket.readByte(); this.typeProtocolCode=dataPacket.readByte(); this.actionProtocolCode=dataPacket.readByte(); this.noteProtocolCode=dataPacket.readByte(); dataPacket.readBytes(message,0,dataPacket.bytesAvailable-1); } public function get ActionProtocol():int { return this.actionProtocolCode; } public function get TypeProtocol():int { return this.typeProtocolCode; } public function get NoteProtocol():int { return this.noteProtocolCode; } public function get Message():ByteArray { this.message.position=0; return this.message; } } }