栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

什么是TLV存储格式以及为什么Protocol Buffer要比Json和XML传输时要快

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是TLV存储格式以及为什么Protocol Buffer要比Json和XML传输时要快

这是Protocol Buffer里的一种存储格式,即:Tag(标识) - Lenght(长度) - Value(字节值)

为什么Protocol Buffer会比Json与XML要快呢?就体现在这点上面,在传输过程中Json与XML是直接把原生的字符串给你传输过去了,不做任何编码处理,纯粹就是字符串解析,比如:

在Protocol Buffer中定义一个消息:

message Person {
    int32 age = 1;
}

仅仅定义一个age的元素,其ID编号为1

然后在用XML定义一个同样的结构元素:

Body{
    test
}

在发送时XML是以字符形式发送出去的,上面的总字符占用:24个字节,一个字符一个字节,而Protocol Buffer不一样,它会将其转化为:Tag(4字节) - Len(4字节) - Value(4字节),总共十二个字节,比XML小了一倍,但是Protocol Buffer有个缺点,就是要求两端通讯程序必须使用同一个生成的people.pb.h文件,这个文件里包含了对每个属性访问的接口,会根据Tag和Len来分配对应的大小空间以及放入对应的元素数组里,最终我们定义的age其实最后都只会变成这个数组里的一个ID,同时又大大减少了Name的长度,然后通过映射访问不同的元素,只是生成的访问接口以属性名生成而已。

其实Protocol Buffer就是把更多的时间用在了编码上,因为随着CPU的发展运算能力越来越强了,这点编码过程对于计算机来说是微不足道的的,网络还需要考虑当前网络情况,是否拥堵等等,所以在本地做编码在发送的方法能大大提升传输效率,同时XML格式还会把字符串的分隔符也放入进去,但Protocol Buffer不一样,它的内存非常紧凑,每隔TLV都是相邻的,没有任何分隔符。

同时它还支持Var属性,就是根据你变量的数值来自动来调节你的字节,如age是32,会简化成int8,用1个字节来存储,因为Protocol Buffer认为一个字节就能存储这个值了,不必要浪费空间,这样又提升了传输空间,并且它没有Lenght这个字节,它是用Value字节的最高位来判断是0还是1,如是1则有后续字节,则会继续往后读,如果为0则认为无后续字节。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号