[QAMF] AMF 格式分析2 – 基本数据类型

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 格式的数据实际上都是有一个一个字节的类型标志开始,后跟这个类型格式约定的具体值。

详细的类型的数据格式,我们慢慢分解。有不对的地方,欢迎大家及时指正。

分享到: