Protocol Buffer学习教程之开篇概述(一)
1. Protocol Buffer是什么
Protocol Buffer是google旗下的产品,用于序列化与反序列化数据结构,但是比xml更小、更快、更简单,而且能跨语言、跨平台。你可以把你的数据按你的要求结构化,然后可以转化成多种数据流,同时其他语言可以通过不同的流转化成自己熟悉的语言的数据格式。如C++语言开发者,定义了一个User数据结构,java开发者可以把此数据流轻易的转化成java环境下的数据结构。
我们知道json比xml更轻便,风闻json数据大小是xml的1/20,然后protobuf又是json的1/10,所以对数据大小要求高的选择protobuf合适;同时protobuff序列化与反序列化速度更快,所以对速度要求高的,可以选择protobuf;最关键一点,让我选择protobuf的原因是,它是向后兼容的,也就是说你可以对你的消息体进行修改,新旧版本之间相互兼容,而xml与json不容易做到这一点。
然后,protobuf的缺点是可读性差,不结合protobuf消息结构,是没办法读懂数据流的,这也是为获得轻便、高效做出的妥协。
2.它是如何工作的
它是怎么工作的呢,首先要把所有数据结构通过一个简单易懂的“.proto”文件定义,然后再把这个文件,通过Protocol buffer编译器编译成相应的类(C++、java、go等)文件。然后开发的时候,可以直接调用类文件中的接口,进行读、写、序列化与反序列化等操作。也就是说,首先它有一个任何语言开发者都易懂的规范文本(.proto),按此规范定义数据结构,然后用一个工具翻译成自己熟悉的语言的类文件,通过此类文件可以简单的操作数据。
3.如何学习protobuf
学习protobuf非常简单,首先你得学会写简单的“.proto”文件,也就是用protobuf语法描述你的数据结构,得先学习基本的protobuf语法,这样你就能定义自己的数据结构,所以我将在第二部分介绍protobuf的语法。其次,当你有自己的“.protobuf”文件后,你要把文件编译成你熟悉的开发语言(C++、java、python等)的数据结构类文件,所以你要一个编译器,在第三章节,我将介绍如何通过官方的源码获得编译器,然后如何把proto文件编译成C++类文件。最后,是如何利用生成的C++类文件,序列化与反序列化数据,与一些常用的方法与注意事项,将在最后一章节中介绍。
4.资源下载
官网首页(需要FQ)链接,最新稳定版本官方链接,各种历史版本官方链接,protocolbuffer有各种语言的版本,目前支持的语言有C、C++、java、python、C#、GO、js等语言。我们这里讲C++稳定版本v3.0.0,windows环境下的VC++开发。在以下链接中,找到“protobuf-cpp-3.0.0”,下载链接,proto规范官方介绍链接。
Protocol Buffer学习教程之开篇概述(一)的更多相关文章
- Protocol Buffer学习教程之编译器与类文件(三)
Protocol Buffer学习教程之编译器与类文件(三) 1. 概述 在前面两篇中,介绍了Protobuf的基本概念.应用场景.与protobuf的语法等.在此篇中将介绍如何自己编译protobu ...
- Protocol Buffer学习教程之类库应用(四)
Protocol Buffer学习教程之类库应用(四) 此教程是通过一个简单的示例,给C++开发者介绍一下如何使用protocol buffers编程,主要包括以下几部分: 定义一个.proto文件 ...
- Protocol Buffer学习教程之语法手册(二)
1.说明 此向导介绍如何使用protocol buffer language创建一个自己的protocolbuffer文件,包括语法与如何通过“.proto”文件生成数据访问的类,此处只介绍proto ...
- Protocol Buffers学习教程
最近看公司代码的过程中,看到了很多proto后缀的文件,这是个啥玩意?问了大佬,原来这是Protocol Buffers! 这玩意是干啥的?查完资料才知道,又是谷歌大佬推的开源组件,这玩意完全可以取代 ...
- Protocol Buffer学习笔记
Protocol Buffer Protobuf基础概念 Protobuf是google开发的数据结构描述语言,能够将结构化数据序列化与反序列化,取代json和xml,常用于服务器通信协议.RPC系统 ...
- 学习Google Protocol buffer之概述
XML这种属于非常强大的一种格式,能存储任何你想存的数据,而且编辑起来还是比较方便的.致命的缺陷在于比较庞大,在某些情况下,序列化和解析都会成为瓶颈.这种对于实时性很强的应用来说,就不太适合了,想象下 ...
- 学习Google Protocol buffer之语法
上一篇结尾的时候问了几个问题,其实主要就是这个protoBuffer协议的语法,弄清楚语法后边才好开展工作嘛,不然大眼而对小眼儿,互相不认识,就没法玩耍了.其实就是学习怎么用google提供的这套 p ...
- netty4与protocol buffer结合简易教程
各项目之间通常使用二进制进行通讯,占用带宽小.处理速度快~ 感谢netty作者Trustin Lee.让netty天生支持protocol buffer. 本实例使用netty4+protobuf-2 ...
- 【神经网络与深度学习】Google Protocol Buffer介绍
简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...
随机推荐
- CF-811B
B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- You have configured this virtual machine to use a 64-bit guest operating system. However, 64-bit
vm虚拟机 问题:You have configured this virtual machine to use a 64-bit guest operating system. However, ...
- ACM-ICPC2018徐州网络赛 Hard to prepare(dp)
Hard to prepare 28.63% 1000ms 262144K After Incident, a feast is usually held in Hakurei Shrine. T ...
- IT兄弟连 JavaWeb教程 监听器4
感知Session绑定事件的监听器 保存在Session域中的对象可以有多种状态:绑定(session.setAttribute("bean",Object)到Session中:从 ...
- How to install your SSL Certificate to your Windows Server
Installation: Open the ZIP file containing your certificate. Save the file named your_domain_name.ce ...
- centos6上安装CDH5.7
目录 一.环境说明及所需软件包... 1 1.环境说明... 1 2.所需软件及说明... 1 二.安装前的主机准备(所有主机都有做) 2 1.配置主机名和修改host文件... 2 2.下载系统基本 ...
- django更换数据库时提示"django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE7\\x94\\xA8\\xE6\\x88\\xB7' for column 'name' at row 1")"
问题提出 昨天在运行django时,初始化使用的是自带的数据库,后来更换mysql数据库,数据库同步之后,打开mysql无法添加数据,插入数据时,提示django.db.utils.InternalE ...
- 黑马学习MyBatis 用MyBatis对表进行条件查询 模糊查询 动态sql
package cn.itcast.domain; /* CREATE TABLE `message` ( `id` int(11) NOT NULL, `command` varchar(16) D ...
- Python-14-抽象及关键字参数
可使用内置函数callable判断某个对象是否可调用 >>> import math >>> x = 1 >>> y = math.sqrt &g ...
- 【BZOJ2428】均分数据
题解 先说说黄学长的做法: 当温度比较高的时候,贪心 每次随机一个数,把他放进当前和最少的那一组里面 温度足够低的时候就完全随机然后转移 对于一个排列,分组强制连续 答案显然唯一,做一遍(dp)就好 ...