Adobe documentation for the AMF format似乎没有实际指定整个AMF消息的结构。它仅指定各个数据类型的格式。我已经五次阅读了该死的东西,要么我完全不知道实际的AMF消息应该包含什么,或者它不存在。有谁知道实际的整个消息结构的任何文档?
答案 0 :(得分:9)
规范可能被描述为“简洁。”
AMF编码使用称为“类型标记”的字节。整数的类型标记是值4.整数数据紧跟在此标记之后,长度为1-4个字节。长度因整数类型被“压缩”而变化,因此值0-127仅需要1个字节,而较大的值需要更多字节。该整数格式由规范称为“U29”。
例如,如果我们简单地传递整数“5”,则有效的AMF数据包将是这两个字节:
04 05
在Web上找到的应用程序中,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
- 'param'
19
- 按字符串数字,字符串长度:12
62 75 74 74 6F 6E 5F 70 72 65 73 73
- 'button_press'
04
- 整数
05
- 整数值:5
01
- 空名称,终止此对象的动态成员的空列表
由于该数据包将占用28个字节,因此在野外遇到时可能会以:00 00 00 1C
作为前缀。
另一种考虑的可能性是AMF通信可能会被压缩,通常使用zlib中提供的“deflate”压缩。
我希望这可以帮助您理清规范,但如果您有疑问,我会尽力回答。
答案 1 :(得分:1)
如果您正在寻找远程处理消息结构,请将其附加到AMF0 spec - 第4节的末尾
答案 2 :(得分:0)
您还可以浏览维基http://en.wikipedia.org/wiki/Action_Message_Format 它有足够的信息。
谢谢, 拉杰什。