您的位置:首页 > 其它

使用ByteArray实现数据的传输,以及协议的分解.

2010-01-30 14:53 726 查看
我们经常在处理数据的时候,很多情况下都会分解数据,比如,我要发送一个数据(游戏指令),玩家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;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: