兩版本AMF協(xié)議數(shù)據(jù)處理對照
在之前的文章中,我們已經(jīng)對AMF協(xié)議的基本情況作了介紹。相信大家已經(jīng)對這個(gè)協(xié)議有了一定了解了?,F(xiàn)在我們再來簡單回顧一下它的基本信息。之后對于兩個(gè)版本的數(shù)據(jù)處理差異再來做一個(gè)介紹。
AMF協(xié)議是Action Message Format協(xié)議的簡稱,AMF協(xié)議是Adobe公司的協(xié)議,主要用于數(shù)據(jù)交互和遠(yuǎn)程過程調(diào)用,在功能上與WebService相當(dāng),但AMF與WebService中的xml不同在于AMF是二進(jìn)制數(shù)據(jù),而xml是文本數(shù)據(jù),AMF的傳輸效率比xml高。AMF使用http方式傳輸,目前主要用于ActionScript中,實(shí)現(xiàn)Flex與Service之間的通信。目前***的版本是AMF3。AMF***的特色在于可直接將Flash內(nèi)置對象,例如Object, Array, Date, XML,傳回服務(wù)器端,并且在服務(wù)器端自動(dòng)進(jìn)行解析成適當(dāng)?shù)膶ο?這就減輕了開發(fā)人員繁復(fù)工作,同時(shí)也更省了開發(fā)時(shí)間。由于AMF采用二進(jìn)制編碼,這種方式可以高度壓縮數(shù)據(jù)(對flash中的AMF3的誤解),因此非常適合用來傳遞大量的資料。
數(shù)據(jù)量越大,Flash Remoting的傳輸效能就越高,遠(yuǎn)遠(yuǎn)超過Web Service。至于XML, 它們使用純文本的傳輸方式,效能就更不能與Flash Remoting相提并論了。除了AMF編碼進(jìn)行高效數(shù)據(jù)操作的功能之外,Byte Array還有一個(gè)很酷的功能,就是從內(nèi)存中深層次的Copy(Clone)整個(gè)對象,請參考使用Byte Array及AMF來提高Data Object的操作效率。
AMF協(xié)議目前有兩種版本,AMF0和AMF3,他們在數(shù)據(jù)類型的定義上有細(xì)微不同。
- TypeByte codeNotes
- Number0×00
- Boolean0×01
- String0×02
- Object0×03
- MovieClip0×04Not available in Remoting
- Null0×05
- Undefined0×06
- Reference0×07
- MixedArray0×08
- EndOfObject0×09See Object
- Array0x0a
- Date0x0b
- LongString0x0c
- Unsupported0x0d
- Recordset0x0e Remoting, server-to-client only
- XML0x0f
- TypedObject (Class instance)0×10
- AMF3 data0×11 Sent by Flash player 9+
對應(yīng)的枚舉就是
- public enum DataType
- {
- Number = 0,
- Boolean = 1,
- String = 2,
- UntypedObject = 3,
- MovieClip = 4,
- Null = 5,
- Undefined = 6,
- ReferencedObject = 7,
- MixedArray = 8,
- End = 9,
- Array = 10,//0x0A
- Date = 11,//0x0B
- LongString = 12,//0x0C
- TypeAsObject = 13,//0x0D
- Recordset = 14,//0x0E
- Xml = 15,//0x0F
- TypedObject = 16,//0x10
- AMF3data=17//0x11
以上表列出了AMF協(xié)議的每種數(shù)據(jù)類型的表示方法。