AMF3使用29bit來表達Variable Length Unsigned 29-bit Integer

最大無號數為2的29次方 - 1.

0x00000000 - 0x0000007F : 0xxxxxxx
0x00000080 - 0x00003FFF : 1xxxxxxx 0xxxxxxx
0x00004000 - 0x001FFFFF : 1xxxxxxx 1xxxxxxx 0xxxxxxx
0x00200000 - 0x1FFFFFFF : 1xxxxxxx 1xxxxxxx 1xxxxxxx xxxxxxxx
0x20000000 - 0xFFFFFFFF : throw range exception

每個byte的最高位bit為一個flag,當flag是1的時候則下一個byte為這個整數的一部分。

ABNF表示:

U29=U29-1 | U29-2 | U29-3 | U29-4
U29-1=%x00-7F
U29-2=%x80-FF %x00-7F
U29-3=%x80-FF %x80-FF %x00-7F
U29-4=%x80-FF %x80-FF %x80-FF %x00-FF

AMF3字串表示:

UTF-8-vr = U29S-ref | (U29S-value *(UTF8-char))

U29S-ref = U29 ; 最低的bit為0時,表示這個字串在參考表裡,剩下1至28bits表示在參考表的索引值
U29S-value = U29 ; 最低的bit為1時,表示後面的bytes是UTF-8字串,剩下1至28bits表示後面的UTF-8字串的byte-length
UTF-8-empty = 0x01 ; 空字串, 不會用參考的方式串送空字串.(empty string which is never sent by reference.)

如:1100 0001 0000 0001 => 非參考字串,UTF-8字串長度 100 0001 0000 000=8320 bytes

 

AMF3 物件型態 (Object type [object-marker=0x0A])

U29O-traits=U29: 1011 ( 0x0b ) 表示這個物件是Dynamic types、不是reference,可以有name-value pair的dynamic members

後面接物件的class name,class-name = UTF-8-vr

Class name後面接dynamic member的name-value pair

dynamic-member = UTF-8-vr的member name + value type,

value type:如果value是一個String,則0x06 marker + UTF-8-vr ( 字串byte長度 + UTF-8 字元 )。

arrow
arrow
    全站熱搜

    Y0121 發表在 痞客邦 留言(0) 人氣()