介绍
AMF(Action Message Format)是一种 binary format,用于序列化 object 比如 ActionScript object 或 XML,用于 client 和 server 间的通信。
AMF 通常与 Adobe 的 RTMP 结合使用,用于序列化建连和控制流媒体传输的命令。
AMF 序列化的二进制通常表示为:Type [Length] Value [Object End]
- Type 占用 1 个字节。
- Length 当 Type 的 Data 为可变长度时存在。
- Value 当前类型的值,按照 Type 和 Length 进行读取和解释。
- Object End 当 Type 为 Object 时存在,占用 1 个字节。
AMF 在发展的过程中存在两个版本,分别是 AMF0 和 AMF3 。
AMF0
AMF0 支持的 Type :
示例
使用 AMF0 序列化 AMF-Object :
var person:Object = {name:'Mike', age:'30', alias:'Mike'};
var stream:ByteArray = new ByteArray();
stream.objectEncoding = ObjectEncoding.AMF0; // ByteArray defaults to AMF3
stream.writeObject(person);
person:Object 的二进制格式:
03 00 04 6e 61 6d 65 02 00 04 4d 69 6b 65 00 03 61 67 65 00 40 3e 00 00 00
00 00 00 00 05 61 6c 69 61 73 02 00 04 4d 69 6b 65 00 00 09
解释:
03 ------------------------------------------ Object (type)
00 04 -------------------------------------- 4 bytes (length)
6e 61 6d 65 -------------------------------- name (value)
02 ------------------------------------------ String (type)
00 04 --------------------------------------- 4 bytes (length)
4d 69 6b 65 --------------------------------- Mike (value)
00 03 --------------------------------------- 3 bytes (length)
61 67 65 ------------------------------------ age (value)
00 ------------------------------------------ Number (type)
40 3e 00 00 00 00 00 00 --------------------- 30 (value)
00 05 --------------------------------------- 5 bytes (length)
61 6c 69 61 73 ------------------------------ alias (value)
02 ------------------------------------------ String (type)
00 04 --------------------------------------- 4 bytes (length)
4d 69 6b 65 --------------------------------- Mike (value)
00 00 09 ------------------------------------ Object End (type)