Adobe's AMF 格式的文档 http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf似乎并没有实际指定整个 AMF 消息的结构。它仅指定单个数据类型的格式。我已经读了五遍这该死的东西,要么我完全错过了实际的 AMF 消息应该包含的内容,要么它不存在。有谁知道实际整个消息结构的任何文档?
该规范可以被描述为“简洁”。
AMF 编码使用称为“类型标记”的字节。整数的类型标记是值 4。整数数据紧跟在该标记之后,长度为 1-4 个字节。长度会有所不同,因为整数类型被“压缩”,因此值 0-127 仅需要 1 个字节,而较大的值需要更多字节。该整数格式在规范中称为“U29”。
例如,如果我们简单地传递整数“5”,则有效的 AMF 数据包将是这两个字节:
04 05
在网络上的应用程序中,AMF 数据有时前面有一个按网络字节顺序编码为无符号长整型的长度。如果您正在观察这样的应用程序,您可能会看到:
00 00 00 02 04 05
,其中00 00 00 02
表示后面的AMF数据是2字节长。
现在,假设我们发送了一个具有以下构造函数的对象:
this.ui = "button_press";
this.param = 5;
那么我们可能会在AMF数据中看到以下内容:
0A
- 对象标签
2B
- u29o-val:2 个密封成员,具有特征和数据的对象,可能是动态成员
01
- 空字符串 -- 匿名对象
05
- 按值字符串,字符串长度:2
75 69
- 'ui'
0B
- 按值字符串,字符串长度:5
70 61 72 61 6D
- '参数'
19
- 按值字符串,字符串长度:12
62 75 74 74 6F 6E 5F 70 72 65 73 73
- '按钮按下'
04
- 整数
05
- 整数值:5
01
- 空名称,终止该对象的动态成员的空列表
由于该数据包将占用 28 个字节,因此它可能带有以下前缀:00 00 00 1C
当在野外遇到时。
另一种需要考虑的可能性是 AMF 通信可以被压缩,通常使用 zlib 中提供的“deflate”压缩。
我希望这可以帮助您理清规范,但如果您有疑问,我会尽力回答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)