AMF协议是Action Message Format协议的简称,AMF协议是Adobe 公司的协议,主要用于数据交互和远程过程调用,在功能上与WebService相当,但AMF与WebService中的xml不同在于AMF是二进制数据,而xml是文本数据,AMF的传输效率比xml高?AMF使用http方式传输,目前主要用于ActionScript中,实现Flex与 Service之间的通信?目前最新的版本是AMF3?AMF最大的特色在于可直接将Flash内置对象,例如Object, Array, Date, XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间?由于AMF采用二进制编码,这种方式可以高度压缩数据(对flash中的AMF3的误解),因此非常适合用来传递大量的资料?
数据量越大,Flash Remoting的传输效能就越高,远远超过Web Service?至于XML, 它们使用纯文本的传输方式,效能就更不能与Flash Remoting相提并论了?除了AMF编码进行高效数据操作的功能之外,Byte Array还有一个很酷的功能,就是从内存中深层次的Copy(Clone)整个对象,请参考使用Byte Array及AMF来提高Data Object的操作效率?
AMF协议目前有两种版本,AMF0和AMF3,他们在数据类型的定义上有细微不同?
1.TypeByte codeNotes
2.Number0×00
3.Boolean0×01
4.String0×02
5.Object0×03
6.MovieClip0×04Not available in Remoting
7.Null0×05
8.Undefined0×06
9.Reference0×07
10.MixedArray0×08
11.EndOfObject0×09See Object
12.Array0x0a
13.Date0x0b
14.LongString0x0c
15.Unsupported0x0d
16.Recordset0x0e Remoting, server-to-client only
17.XML0x0f
18.TypedObject (Class instance)0×10
19.AMF3 data0×11 Sent by Flash player 9+
对应的枚举就是
1.public enum DataType
2.{
3. Number = 0,
4. Boolean = 1,
5. String = 2,
6. UntypedObject = 3,
7. MovieClip = 4,
8. Null = 5,
9. Undefined = 6,
10. ReferencedObject = 7,
11. MixedArray = 8,
12. End = 9,
13. Array = 10,//0x0A
14. Date = 11,//0x0B
15. LongString = 12,//0x0C
16. TypeAsObject = 13,//0x0D
17. Recordset = 14,//0x0E
18. Xml = 15,//0x0F
19. TypedObject = 16,//0x10
20. AMF3data=17//0x11
以上表列出了AMF协议的每种数据类型的表示方法。