C#比json更小的编码方式详解MessagePack


https://msgpack.org/
https://github.com/msgpack/msgpack/blob/master/spec.md#overview

 

    [MessagePack.MessagePackObject(true)]
    public class MesFoo 
    {
        [Key(3)]
        public int Age { set; get; } = 1;

    }

var mfoo = new MesFoo();

 var byteList = MessagePackSerializer.Serialize(mfoo);

 

在 [MessagePack.MessagePackObject(false)]
下 key01234  ...

91 01
fixarray    1001xxxx    0x90 - 0x9f
被当做 数组array
array类型 key 最大值区分
0-15
+--------+~~~~~~~~~~~~~~~~~+
|1001XXXX|    N objects    |
+--------+~~~~~~~~~~~~~~~~~+
16 - (2^16)-1
array 16 stores an array whose length is upto (2^16)-1 elements:
+--------+--------+--------+~~~~~~~~~~~~~~~~~+
|  0xdc  |YYYYYYYY|YYYYYYYY|    N objects    |
+--------+--------+--------+~~~~~~~~~~~~~~~~~+
(2^32)-1
array 32 stores an array whose length is upto (2^32)-1 elements:
+--------+--------+--------+--------+--------+~~~~~~~~~~~~~~~~~+
|  0xdd  |ZZZZZZZZ|ZZZZZZZZ|ZZZZZZZZ|ZZZZZZZZ|    N objects    |
+--------+--------+--------+--------+--------+~~~~~~~~~~~~~~~~~+

一开始 长度位 
不存在用null 0xc0 填充。。  nil 11000000 0xc0 


fixmap    1000xxxx    0x80 - 0x8f
在 [MessagePack.MessagePackObject(true)]

被当做 Map字典

 [Key(0)]
 [Key(1)]
96  C0 C3 C0 C0 C0 A9 68 61 6E 62 69 6E 64 73 67

bool 类型
false:
+--------+
|  0xc2  |
+--------+
true:
+--------+
|  0xc3  |
+--------+

int类型
1, 2, 3, 5, or 9 bytes.

1位
0x00 - 0x7F 
是 0-127  0x00 - 0x7F 无符号整形   C# sbyte.MaxValue  

2位
+--------+--------+
|  0xcc  |ZZZZZZZZ|
+--------+--------+
是128-255 从0xCC 0x80到0xCC 0xFF

3位
+--------+--------+--------+
|  0xcd  |ZZZZZZZZ|ZZZZZZZZ|
+--------+--------+--------+

 是256 开始 0xCD 0x01 0x00 ,256 十六进制是 0100 (0x01 0x00 。2个字节)
以此类推

在 [MessagePack.MessagePackObject(true)] 
 KeyAttribute直接作废
public int Age { set; get; } = 1;
81 A3 41 67 65 01   
81是map字典长度  。fixmap    1000xxxx    0x80 - 0x8f
 A3 41 67 65  其中 A3 是string长度位。 fixstr    101xxxxx    0xa0 - 0xbf
41 67 65,其中0x41 大写字符A. A的ASCII码为65(0x41 );
 

 

代码参考https://lindexi.gitee.io/post/dotnet-%E4%BD%BF%E7%94%A8-MessagePack-%E5%BA%8F%E5%88%97%E5%8C%96%E5%AF%B9%E8%B1%A1.html

 

你可能感兴趣的:(C#,C#,编程指南)