AMF解析(一)

 

AMF是AS中的一种数据格式,非常简洁,那为什么简洁呢,以前一直不清楚,看了AMF的数据格式后,才发现原来真的很简洁,数据量小。。呵呵,废话了这么多,下面我们来看下吧。

AMF一共有13种数据类型,每种类型都用一个字节来表示

undefined =  0

null      1

false     2

true      3

int       4

double    5

string    6

xml-doc    7

date      8

array     9

object    10

xml       11

byte-array=  12

以上类型一目了然,其实as中ByteArray.writeObject的时候,都是以AMF格式写入字节数组中,那么下面我们来逐个利用程序分析下吧,每种数据类型定义好后,都利用ByteArray.writObject写入数据,再输出。

undefined 就不说了,遇到不认识的类型,就0吧。

null:字节数组={1},很简单,null类型为1,所以后面不带任何东西。

false:字节数组={2},同上。

true:字节数组={3},同上。

int:这时候我们要真正开始讲AMF了,我们分别以10,100,1000来分析下。

1、var byteArray:ByteArray = new ByteArray();

   byteArray.writeObject(a);

   a = 10 -> {4,10}

   a = 10000 -> {4,206,16}

   a = 100000 -> {4,134,141,32}

   a = 10000000 -> {4,130,177,150,128}

每次都是以类型字节开始,4表示是int型。int最大占4个字节,超出后AMF就会以double类型发送。后续每个字节的最高位,表示下一字节是否有效。

{4,10},10转成二进制 = 0000 1010,由于最高位为0,所以后一字节无效,那么直接返回该int值为10

{4,206,16},206转成二进制 = 1100 1110,由于最高位为1,所以后一字节仍然有效,此时将1100 1110最高位置0并左移7位,变成0010 0111 0000 0000。再看16 = 00010 000,由于最高位为0,故下一字节无效,两字节做"|"运算0010 0111 0000 0000 | 00010 000便得出结果10000。

其他2个数依次类推大家自己算吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值