AMF解析(一)

来源:互联网 发布:云匠网 在线全职美工 编辑:程序博客网 时间:2024/06/14 13:11
 

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个数依次类推大家自己算吧!

原创粉丝点击