Google Protocal Buffer
Google Protocal Buffer 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化或者说序列化。它很适合做数据存储或RPC数据交换格式。
串行化(序列化):将对象存储到解释中式以二进制方式通过网络传输。之后可以通过反串行化从这些联系的字节数据重新构建一个与袁术对象状态相同的对像。
RPC:Remote Procedure Call Protocal--(RFC-1831)远过程调用协议
Protobuf的优点:
Protobuf有如xml,不过它更小,更快更简单。你可以自己定义自己的数据结构,然后使用代码生成器生成代码赖读写这个数据结构。你甚至可以再无需重新部署程序的情况下根性数据结构。秩序使用Protobuf对数据结构进行一次描述,即可以利用各种不同语言或者各种不同数据流中对你的结构化数据轻松读写。
它还有一个非常棒的特性,即“向后”兼容性好,人们不必破坏已部署的、依靠老数据格式的程序就可以对数据结构进行升级。这样你的程序就可以不必担心因为消息结构的改变而造成大规模的代码重构或者前一问题。因为添加新的消息中的field并不会引起已经发布的程序的任何修改。
Protobuf语义更清晰,无需类似xml解析器的东西(因为Protobuf编译器会将.proto文件编译生成对应的数据访问类以对数据进行序列化和反序列化操作)。
使用Protobuf无需学习复杂的文档对象模型,Protobuf的编程模式比较友好,简单易学,同时它拥有良好的文档和示例,对于喜欢简单事物的人们而言,Protobuf比其他技术更加有吸引力
Protobuf的缺点:
Protobuf与XML相比,它功能简单,无法用来表示复杂的概念 XML已经成为多种行业的标准编写工具,Protobuf只是Google公司内部使用的工具,在通用性上还差很多。 由于文本并不适合用来描述数据结构,所以Protobuf也不适合用来对基于文本的标记文档(HTML)建模。另外,由于XML具有某种程度上的自解释性,它可以被人直接读取编辑,在这一点上Protobuf不行,它以二进制的方式存储,除非你有.proto定义,否则你没法直接读出 Protocol Buffer可以很好的支持嵌套Message和引入Message,从而让定义复杂的数据结构的工作变得非常轻松愉快。
动态编译:
一般情况下,使用Protobuf的人们都会先写好.proto文件,再用Protobuf编译器生成膜表语言所需要的源代码文件。将这些生成的代码和应用程序一起编译。
可是在某些情况下,人马无法预先知道.proto文件,需要动态处理一些位置的.proto文件。这需要动态编译.proto文件,并使用其中的Message.
Protobuf提供了google::protobuf::compiler包赖完成动态编译的功能。主要的类叫做importer,定义在importer.h中。 import类对象中包含三个主要的对象,分别为处理错误的MultiFileErrorCollector类,定义.proto文件源目录的SourceTree类
Google Protocal Buffer的更多相关文章
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google Protocol Buffer 的使用
简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...
- 学习Google Protocol buffer之概述
XML这种属于非常强大的一种格式,能存储任何你想存的数据,而且编辑起来还是比较方便的.致命的缺陷在于比较庞大,在某些情况下,序列化和解析都会成为瓶颈.这种对于实时性很强的应用来说,就不太适合了,想象下 ...
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
- Google Protocol Buffer 的编码方式
Google Protocol Buffer 使用到了两种编码方式:Varints 和 zigzag. 一 Varints 编码 每个 byte 只用 7bit 表示数字,最高位 bit作为标志位,如 ...
- Google Protocol Buffer 协议
1. Protocol Buffers 简介 Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化 ...
- google proto buffer安装和简单示例
1.安装 下载google proto buff. 解压下载的包,并且阅读README.txt,根据里面的指引进行安装. $ ./configure $ make $ make check $ mak ...
- Google Protocol Buffer
Google Protocol Buffer(protobuf)是一种高效且格式可扩展的编码结构化数据的方法.和JSON不同,protobuf支持混合二进制数据,它还有先进的和可扩展的模式支持.pro ...
随机推荐
- enigma机的原理
注:本文修改自三思科学<ENIGMA的兴亡> ENIGMA ENIGMA看起来是一个装满了复杂而精致的元件的盒子.不过要是我们把它打开来,就可以看到它可以被分解成相当 ...
- O - Extended Traffic(判断负环)
题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J的时间为:(aJ-aI)^3,存在负环.问从第一个城市到达第k个城市所话的时间,如果不能到达,或者时间小于3输出?否则输出所花的 ...
- 怎样把redis编译为库,挪为己用?
其实这是个伪命题.因为只要正常编译redis,那么在 /deps/hiredis/ 目录下就会生成动态库文件 libhiredis.so. 为了便于学习redis源码,编写一些测试程序,并进行单步跟踪 ...
- ruby 安装 运行
Ruby基础 一 简介 1.Ruby在windows平台下的安装 (1)下载地址:http://rubyinstaller.org/downloads/ (2)安装过程 这里我们选择安装路径为 D:\ ...
- MySQL ERROR 1045错误解决办法
今天在安装MySQL数据库时,有安装过程中报ERROR 1045错误,网上查了一下,解决方法如下: 1.对于安装过程中该错选择"skip"继续向下安装,完成安装: 2.在MySQL ...
- lantern蓝灯导致IE和一些软件不能上网解决方法
@echo offREG DELETE "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Setti ...
- 关于kali安装vmware的坑,linux套路太深。
http://www.linuxidc.com/Linux/2015-08/122240.htm 但是还有些坑 安装gcc5.4.1 apt-get install gcc-5 gcc-5所在目录 / ...
- 一个小程序,时间util
比较时间,如果此时间是今天的显示时间点,今天以前显日期 public String getTime(Date time){ SimpleDateFormat dateFor ...
- 搭建自己的SIPserver:开源sipserveropensips的搭建及终端TwInkle的使用
先下载源代码: 这里我下载的是1.8.2,由于这个是眼下的最稳定版本号,(尽管已经有1.9及2.0了) http://opensips.org/pub/opensips/1.8.2/src/opens ...
- Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
1. 迭代器为什么不定义成一个类,而是定义为一个接口 ? 答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历.但是呢? 我们想想,Java中提供了很多的集合类 ...