Google Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前支持主流的语言(java\c++\python\c#\go....)。

具官方说法使用PB 进行序列化和反序列化性能是xml序列化和反序列化的20~100倍,在各种序列化和反序列化方式中,处于领先地位。

PB的序列化结果是字节与字节的连接,省略了字段名称,在存储上也比其他方式要小,更节省空间。不过这样带来了可读性变差和调试困难。

官方源码:https://github.com/google/protobuf

各版本的编译结果下载地址:https://github.com/google/protobuf/releases

官方介绍:https://developers.google.com/protocol-buffers/

1、下载protoc

在https://github.com/google/protobuf/releases中,可以看到多个系统的protoc文件:

protoc-3.3.0-linux-x86_32.zip

protoc-3.3.0-linux-x86_64.zip

protoc-3.3.0-osx-x86_32.zip

protoc-3.3.0-osx-x86_64.zip

protoc-3.3.0-win32.zip

下载后,解压就可以。

2、在解压目录创建一个*.proto 文件。

如:test.proto

syntax = "proto3";

message test{

double Id=1;

string Name=2;

}

syntax = "proto3"; 为指定一个版本,此含义为使用proto3

message为关键字,test为类名

double/string为类字段类型,Id/Name为字段属性,1/2为存储序号,定义后不可变

详细定义和使用方法参考:https://developers.google.com/protocol-buffers/docs/proto3#simple

3、生成各种语言的类文件

protoc --cpp_out="./"  --java_out="./"   --csharp_out="./"  ./test.proto

“./”为当前protoc所在目录,protoc为可执行文件

4、序列化与反序列化(以下C#示例)

 Google.Protobuf.IMessage test= new test() {  Id= 3333555555234234.333, Name= "dfsdfsdfsdfsdfsdfsdfs"};  //创建test对象

 byte[] buf = null;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
//序列化
using (Google.Protobuf.CodedOutputStream output = new Google.Protobuf.CodedOutputStream(ms))
{
test.WriteTo(output);
} buf = ms.ToArray();
} test newTest = new test();
using (Google.Protobuf.CodedInputStream input = new Google.Protobuf.CodedInputStream(buf))
{
//反序列化
newTest.MergeFrom(input);
}

Google Protocol Buffers 入门的更多相关文章

  1. Google Protocol Buffers 快速入门(带生成C#源码的方法)

    Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...

  2. Google Protocol Buffers介绍

    简要介绍和总结protobuf的一些关键点,从我之前做的ppt里摘录而成,希望能节省protobuf初学者的入门时间.这是一个简单的Demo. Protobuf 简介 Protobuf全称Google ...

  3. C# 使用Google Protocol Buffers

    Google Protocol Buffers 使用3.0版本 下载protoc.exe 下载链接 https://github.com/protocolbuffers/protobuf/releas ...

  4. Google Protocol Buffers简介

    什么是 protocol buffers ? Protocol buffers 是一种灵活.高效的序列化结构数据的自动机制--想想XML,但是它更小,更快,更简单.你只需要把你需要怎样结构化你的数据定 ...

  5. C#/net 使用Protocol Buffers入门

    Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于 ...

  6. Java使用Protocol Buffers入门四步骤

    Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XM ...

  7. Google Protocol Buffer入门

    简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...

  8. Google Protocol Buffers 反序列化 转

    http://www.cnblogs.com/royenhome/archive/2010/10/30/1865256.html   本文作为结束篇,会稍微介绍下怎么反序列化GoogleBuffer数 ...

  9. Google Protocol Buffers和java字符串处理控制

    大多数的操作码被从夜晚复制.懒得敲. 直接在源代码和测试结果如下. serabuffer.proto档.使用下面的命令来生成java代码. protoc -I=./ --java_out=./ ser ...

随机推荐

  1. redis 部分操作

    http://pan.baidu.com/s/1eRXdbUy  下载安装地址 打开一个cmd窗口,使用cd命令切换到指定目录(D:\ruanjian\redis\64bit)运行 redis-ser ...

  2. 怎么通过tomcat的catalina.out查看日志

    进入tomcat的logs目录下:cd apache-tomcat/logs/ 查看logs下的文件和目录:ll   可以找到catalina.out文件: 实时查看日志: tail -fn 100 ...

  3. es5数组的新方法

    1.every方法 //逻辑判断返回值为一个Boolean值 every方法就是每一个返回函数的返回值都是true的时候,才为true,否则为false var arr=[1,2,5,88,5,555 ...

  4. 添加网络ADB的方法(含以太网和无线)

    将下面代码添加至packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 结合之前的添加wifi adb的博客 ...

  5. python读取文件操作.CSV

    #-*- encoding:utf-8 -*- import numpy as np import pandas as pd def test(): # header=0,表示文件第0行为列索引 # ...

  6. Struts2之ModelDriven和Preparable拦截器

    首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack <package name="default" namespace=& ...

  7. js 数组操作函数有:push,pop,join,shift,unshift,slice,splice,concat

    (1)push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作.push(arg1,arg2,...)可以每次压入一个或多个元素,并返回更新后的数组长度.注意如果参数也是数组的话,则是将全部 ...

  8. 一天学习两个设计模式之Facade模式(外观模式,结构型模式)

    程序这东西随着时间推移,程序会越来越大,程序中的类越来越多,而且他们之间相互关联,这会导致程序结构变得越来越复杂.因此我们在使用他们时候,必须要弄清楚他们之间的关系才能使用他们. 特别是在调用大型程序 ...

  9. SRM468

    250pt 给定手机0-9按键对应的英文字母(1个对多个),0固定对应空格.然后在给定一些单词.以及一个要处理的串,叫你按照那个串模拟输出结果 思路: 大模拟,写的有点乱 // BEGIN CUT H ...

  10. (25)uniGUI for C++ builder之UniHTMLMemo初使用及uniGUI如何调用javaScript

    (25)uniGUI for C++ builder之UniHTMLMemo初使用及uniGUI如何调用javaScript 2018年09月29日 22:58:20 中国银行之路在脚下 阅读数:11 ...