- int
- string
- long
struct Company //结构体的名称
{
0 need int id;
1 need long code;
2 need string name;
3 optional string addr;
}
- 前面的数字(表示这个参数在此结构的tag标记位)
- need和optional(need表示参数一定会有,optional表示此参数为可选)
- json 数据格式如下:
{"id":10,"code":1111,"name":"coco","addr":"aaaaaaaaaa"}
- xml 数据格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<o>
<addr type="string">aaaaaaaaaa</addr>
<code type="number">1111</code>
<id type="number">10</id>
<name type="string">coco</name>
</o>
缺点很明显,在数据量比较大时,这样的数据传输大小会很大,如果一个接口被频繁的调用而且需要传输的数据量又比较大时, 既消耗服务器带宽又增加的接口的响应速度,磁盘的io也会受到影响。
很多大公司都会定义,编写自己内部的数据序列化格式,数据的组包协议。而它就是用来优化这个问题。下面就举个简单的序列化的方式, 来重新序列化id=10,code=1111,name='coco',addr='aaaaaaaaaa'的这段数据。
class CoType
{
const CO_INT = 1;
const CO_LONG = 2;
const CO_STRING = 3;
}
//使用 type+tag+length+content 序列化后应该像这样
10210 2141111 324coco 3310aaaaaaaaaa
- 10210可以依次拆分为 1 0 2 10,数据类型为1的即int类型,tag为0的即参数名为id,内容长度为2的,实际内容为10.最终可以解析得到:id=10
- 2141111可以依次拆分为 2 1 4 1111,数据类型为2的即long类型,tag为1的即参数名为code,内容长度为4的,实际内容为1111.最终可以解析得到:code=1111