AMF 格式的数据类型分为两种,一种是 AMF 0 规定的数据类型,另一种就是 AMF 3 规定的数据类型。它们之间是通过 AMF0 中一个特殊的类型 0x11 (类型编码为 17)来进行转换的。也就是说,在按 AMF 0 解析内容时,如果遇到类型的编码为 0x11 的项目,那就说明这个项目是 AMF3 格式的对象了,我们需要按 AMF 3 格式对其内容进行解析。
先看 AMF 0 的数据类型( 2006 版):
- 0 :双精度浮点数,格式为标准的Doube类型的 BE 编码表示,我们用时需要转换字节度;
- 1 :布尔类型,1 代表真,0 代表假;
- 2 :短字符串,最长是65535字节;前两个字节是一个16 位 BE 编码的整数,代表后面的 UTF-8 字符串内容的长度。
- 3:对象
- 4:视频剪辑
- 5:NULL
- 6:未定义
- 7:引用
- 8:混合数组
- 9:对象结束
- 10:普通数组
- 11:日期时间
- 12:长UTF-8字符串,头32位整数代表字符串长度
- 13:Action Script 对象
- 14:数据集
- 15:XML 字符串
- 16:用户定义类型
- 17:AMF 3 格式对象
再看 AMF 3 的类型( 2013 版):
- 0:未定义
- 1:NULL
- 2:假
- 3:真
- 4:最大 29 位整数(U29)
- 5:双精度浮点数
- 6:UTF-8字符串,以一个U29整数来表示字符串长度,后跟内容
- 7:XML 文档
- 8:日期时间类型
- 9:数组
- 10:对象
- XML:XML 字符串
- 12:字节流
- 13:整型向量
- 14:无符号整数向量
- 15:双精度浮点数向量
- 16:对象向量
- 17:字典
为啥 AMF3 会有两个 XML 支持,这个问 Adobe 去,反正不是我规定的。每个 AMF 格式的数据实际上都是有一个一个字节的类型标志开始,后跟这个类型格式约定的具体值。
详细的类型的数据格式,我们慢慢分解。有不对的地方,欢迎大家及时指正。