这是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传输时要快相关推荐

  1. Tensorflow中的Protocol Buffer

    Protocol Buffer是谷歌公司开发的处理结构化数据的工具.注意这里介绍的结构化数据和大数据中的结构化数据的概念不同,这里的结构化数据指的是拥有多种属性的数据.比如一个用户:包含名字,ID,和 ...

  2. 数据交换格式 - PB(protocol buffer),xml,json,array

    目录 PB PB vs xml PB vs json json json vs xml xml 数组 PB 扩充容易, 二进制 序列化简单 ProtocolBuffers-Google's data ...

  3. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  4. Google Protocol Buffer 的使用和原理

    FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...

  5. 快来看看Google出品的Protocol Buffer,别仅仅会用Json和XML了

    前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 事实上 是 Google出品的一种轻量 & 高效的结构化数据 ...

  6. Hadoop基于Protocol Buffer的RPC实现代码分析-Server端--转载

    原文地址:http://yanbohappy.sinaapp.com/?p=110 最新版本的Hadoop代码中已经默认了Protocol buffer(以下简称PB,http://code.goog ...

  7. Golang 使用Protocol Buffer 案例

    目录 1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3. ...

  8. 不仅仅于 Json和XML ,快来学习Google出品的序列化神器Protocol Buffer

    前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存 ...

  9. Google Protocol Buffer学习笔记(一)

    概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...

最新文章

  1. 如何实现后台向前台传数据
  2. nginx前端根据$remote_addr分发方法
  3. sigmoid函数_机器学习面试常考知识之激活函数
  4. 使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
  5. leetcode100. 相同的树(dfs)
  6. SQL Server的游标
  7. android camera滑动,Android怎么实现小米相机底部滑动指示器
  8. CNN转换为SNN的算法
  9. 典型的异步服务器端套接字构建
  10. Unity VR开发出语音识别功能
  11. oracle vba 数组_vba:使用array中的文本从selection.find返回页码
  12. 为什么计算机中整数的范围是-32768~32767而不是-32767~32767
  13. java:窗体里的标签(设置标签;字体;颜色)
  14. Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息
  15. 导致联想拯救者y7000触控板失灵的一种可能
  16. 哈夫曼编码器“数据结构课程设计”
  17. 2021-07-13 ARM cortex三个版本A、R、M简单介绍
  18. 21款超赞的手写英文字体,总有一款适合你
  19. 宽带不能上传发文件_光纤宽带和普通宽带的区别
  20. 从程序员到asp.net架构师转变

热门文章

  1. 20h2是04服务器操作系统吗,爆料:微软 Win10 20H2 将是小更新
  2. python对象的引用_Python 对象引用、可变性和垃圾回收
  3. idea报错 IDEA:clear read-only status
  4. Linux 根据服务名字找安装路径
  5. Tcl Tutorial 笔记8 · proc
  6. linux鼠标改为自动聚焦,如何在Linux上取消聚焦(模糊)Pythongi GTK+3窗口
  7. python 与_Python基础 第一个 Python 程序
  8. android 计算圆周率方法,android Math的使用
  9. oracle统计每个类别,Oracle统计分析函数集之一
  10. linux脚本编程教程,shell脚本编程基础教程