首页 > 代码库 > AMFObject数据格式解析

AMFObject数据格式解析

AMF

  AMF是Action Message Format的简写,它是一种二进制的数据格式。它的设计是为了把actionscript里面的数据(包括Object, Array, Boolean, Number等)序列化成二进制数据,然后把这段数据随意发送给其他接收方程序,比如发给远程的服务器,在远程服务器那边,可以把这段数据给还原出来,以此达到一个数据传输的作用。

为什么要用AMF

  通常情况下我们使用JSON或者XML来做数据的传输,他们的好处是文本数据易读、容易修改,坏处在于文本数据体积较大,而且数据的组织有其局限性。那么二进制协议是不是只有AMF一个呢? 答案明显是否定的,你完全可以自定义自己的二进制数据格式,用AMF只是由于它是现成的,拿来即可用,不用重新去发明轮子。

AMFObject详解

amf.h中关于 AMFObject 是这样的定义的:

    typedef struct AMFObject
    {
        int o_num;
        struct AMFObjectProperty *o_props;
    } AMFObject;  

AMFObject表示AMF对象,o_num 代表 o_props的个数, 一个对象内部可以包含N个对象属性;

    typedef struct AMFObjectProperty
    {
        AVal p_name;
        AMFDataType p_type;
        union
        {
            double p_number;
            AVal p_aval;
            AMFObject p_object;
        } p_vu;
        int16_t p_UTCoffset;
    } AMFObjectProperty;

AMFObject表示AMF对象属性,即key-value键值对。p_name表示key;p_type表示value的类型;p_vu表示value的数值。

p_vu设置为联合体的目的:

当p_type为number时, m_vu取值double类型 p_number;

当p_type为string时,    m_vu取值AVal类型 p_aval;

当p_type为object时,   m_vu取值AMFObject类型 p_object。

 

AMFObject数据格式解析