什么是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{<name>test<name>
}
在发送时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则认为无后续字节。
什么是TLV存储格式以及为什么Protocol Buffer要比Json和XML传输时要快相关推荐
- Tensorflow中的Protocol Buffer
Protocol Buffer是谷歌公司开发的处理结构化数据的工具.注意这里介绍的结构化数据和大数据中的结构化数据的概念不同,这里的结构化数据指的是拥有多种属性的数据.比如一个用户:包含名字,ID,和 ...
- 数据交换格式 - PB(protocol buffer),xml,json,array
目录 PB PB vs xml PB vs json json json vs xml xml 数组 PB 扩充容易, 二进制 序列化简单 ProtocolBuffers-Google's data ...
- 【C++】Google Protocol Buffer(protobuf)详解(一)
1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...
- Google Protocol Buffer 的使用和原理
FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...
- 快来看看Google出品的Protocol Buffer,别仅仅会用Json和XML了
前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 事实上 是 Google出品的一种轻量 & 高效的结构化数据 ...
- Hadoop基于Protocol Buffer的RPC实现代码分析-Server端--转载
原文地址:http://yanbohappy.sinaapp.com/?p=110 最新版本的Hadoop代码中已经默认了Protocol buffer(以下简称PB,http://code.goog ...
- Golang 使用Protocol Buffer 案例
目录 1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3. ...
- 不仅仅于 Json和XML ,快来学习Google出品的序列化神器Protocol Buffer
前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存 ...
- Google Protocol Buffer学习笔记(一)
概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...
最新文章
- 如何实现后台向前台传数据
- nginx前端根据$remote_addr分发方法
- sigmoid函数_机器学习面试常考知识之激活函数
- 使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
- leetcode100. 相同的树(dfs)
- SQL Server的游标
- android camera滑动,Android怎么实现小米相机底部滑动指示器
- CNN转换为SNN的算法
- 典型的异步服务器端套接字构建
- Unity VR开发出语音识别功能
- oracle vba 数组_vba:使用array中的文本从selection.find返回页码
- 为什么计算机中整数的范围是-32768~32767而不是-32767~32767
- java:窗体里的标签(设置标签;字体;颜色)
- Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息
- 导致联想拯救者y7000触控板失灵的一种可能
- 哈夫曼编码器“数据结构课程设计”
- 2021-07-13 ARM cortex三个版本A、R、M简单介绍
- 21款超赞的手写英文字体,总有一款适合你
- 宽带不能上传发文件_光纤宽带和普通宽带的区别
- 从程序员到asp.net架构师转变
热门文章
- 20h2是04服务器操作系统吗,爆料:微软 Win10 20H2 将是小更新
- python对象的引用_Python 对象引用、可变性和垃圾回收
- idea报错 IDEA:clear read-only status
- Linux 根据服务名字找安装路径
- Tcl Tutorial 笔记8 · proc
- linux鼠标改为自动聚焦,如何在Linux上取消聚焦(模糊)Pythongi GTK+3窗口
- python 与_Python基础 第一个 Python 程序
- android 计算圆周率方法,android Math的使用
- oracle统计每个类别,Oracle统计分析函数集之一
- linux脚本编程教程,shell脚本编程基础教程