Google Protocol Buffers 入门
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 入门的更多相关文章
- Google Protocol Buffers 快速入门(带生成C#源码的方法)
Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...
- Google Protocol Buffers介绍
简要介绍和总结protobuf的一些关键点,从我之前做的ppt里摘录而成,希望能节省protobuf初学者的入门时间.这是一个简单的Demo. Protobuf 简介 Protobuf全称Google ...
- C# 使用Google Protocol Buffers
Google Protocol Buffers 使用3.0版本 下载protoc.exe 下载链接 https://github.com/protocolbuffers/protobuf/releas ...
- Google Protocol Buffers简介
什么是 protocol buffers ? Protocol buffers 是一种灵活.高效的序列化结构数据的自动机制--想想XML,但是它更小,更快,更简单.你只需要把你需要怎样结构化你的数据定 ...
- C#/net 使用Protocol Buffers入门
Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于 ...
- Java使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XM ...
- Google Protocol Buffer入门
简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...
- Google Protocol Buffers 反序列化 转
http://www.cnblogs.com/royenhome/archive/2010/10/30/1865256.html 本文作为结束篇,会稍微介绍下怎么反序列化GoogleBuffer数 ...
- Google Protocol Buffers和java字符串处理控制
大多数的操作码被从夜晚复制.懒得敲. 直接在源代码和测试结果如下. serabuffer.proto档.使用下面的命令来生成java代码. protoc -I=./ --java_out=./ ser ...
随机推荐
- Redis-环境搭建
Redis官方不提供Windows版,不过微软开源组织提供了Windows版本的Redis,此处将安装Windows版的Reids,供学习使用. 1.下载Windows版Redis安装包: 安装包地址 ...
- asp.net下配置使用Memcached 如何使用Memcached .ne使用BeITMemcached.dllt配置Memcached的方法
首先在项目中引用 BeITMemcached.dll 在Web.config中配置节点 <configSections> <section name="beitmemcac ...
- Web墨卡托坐标与WGS84坐标互转
原文地址:http://bbs.esrichina-bj.cn/ESRI/thread-78245-1-1.html 在WebGIS的开发中经常用到的地图投影为Web墨卡托和WGS84,故歌地图,bi ...
- ArcGIS API for Silverlight部署本地地图服务
这一节我们来讲新建立的ArcGIS API for Silverlight应用程序如何加载自己的地图服务的问题,网上的资料讲的都有点含糊不清,这次我们详细的讲一下配置的步骤: 首先介绍下我们的开发和部 ...
- spring父子Ioc容器的关系
在网上找了一下,没有直接解说ioc父子容器关系的文章,所以大概看了下代码,自己写下吧,写俩行做个笔记. 1. 在进行dean的注册的时候,父容器和子容器是互不干扰的,各自注册自己的 2. 在实例化的时 ...
- spring启动component-scan类扫描加载,以及@Resource,postConstruct等等注解的解析生效源码
spring里IOC的原理就不详细写了, 如果想要搞清楚自动扫描组件是如何实现的,还有@Resouce @PostConstruct等注解的工作原理,最好可以先搞清楚整个IOC容器的运作原理再来分析这 ...
- 将一个浮点数转换成人民币读法字符串(java)
public class Num2Rmb { private String[] hanArr = {"零" , "壹" , "贰&qu ...
- AWS–Sysops notes
Monitoring, Metrics and Analysis 1.CouldWatch Introduction2.EC2 Status Troubleshooting3.Create A Cou ...
- Excel表格公式大全[转]
Excel技巧网_官方微博 作者: Excel技巧网_官方微博 2016-09-23 14:05:20 举报 阅读数:21219 1.查找重复内容公式:=IF(COUNTIF(A:A,A2)> ...
- AlexNet详解3
Reference. Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Ne ...