protobuf (序列化协议)

出品方为google,详见ibm技术文档: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

1.简介

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

2.使用过程

写一个 proto 文件,定义我们程序中需要处理的结构化数据。

写好 proto 文件之后就可以用 Protobuf 编译器将该文件编译成目标语言了。

使用com.google.protobuf.GeneratedMessage.Builder来序列化对象。

3.其他协议对比

3.1 性能

protobuf序列化后的文件尺寸小,序列/反序列化性能高。

3.2 便利性

json肉眼可读,而protobuf是二进制。

3.3 使用场景

客户端与服务端的低频短消息通信可用json。

server之间高频的对象传输(如消息队列)用protobuf等。

时间: 2024-09-20 05:42:02

protobuf (序列化协议)的相关文章

Spearal —— 超越 JSON 全新的对象序列化协议

Spearal 是一个全新的开源的序列化协议,旨在突破 JSON 的限制,其目标第一步是让 HTML 和原生移动应用可连接到 Java 的后端. Spearal 主要目标是让序列化更简单,封装了端点之间复杂的数据库结构交换.提供包括部分对象序列化.内建 JPA 支持.发散模式.对象属性过滤等等.目前该项目还在早期开发阶段. 文章转载自 开源中国社区 [http://www.oschina.net]

几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比

最近研究了下google protobuf协议,顺便对比了一下json,xml,java序列化相关的数据对比,从几个纬度进行对比.   别人的相关测试数据: http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking   测试纬度 序列化时间 反序列化时间 bytes大小 测试代码 准备protobuf文件 1.import "InnerMessage.proto"; 2.package demo; 3.opti

微服务RPC框架选美

1.RPC 框架谁最美? 本文讲的是微服务RPC框架选美,Hello,everybody!说到RPC框架,可能大家能想到一堆RPC开源框架,那么在微服务平台中,微服务间的服务调用,不可避免的会遇到一个问题,该选用哪一个RPC框架好呢?今天我们就请到三位RPC框架,来进行一场选美大赛,看看谁更适合微服务平台中的服务间调用. 大家好,我是Dubbo!我是阿里开源的分布式服务框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 大家好,我是Motan!我

在 muduo 中实现 protobuf 编解码器与消息分发器

本文是<一种自动反射消息类型的 Google Protobuf 网络传输方案>的延续,介绍如何将前文介绍 的打包方案与 muduo::net::Buffer 结合,实现了 protobuf codec 和 dispatcher. Muduo 的 下载地址: http://muduo.googlecode.com/files/muduo-0.1.9-alpha.tar.gz ,SHA1 dc0bb5f7becdfc0277fb35f6dfaafee8209213bc ,本文的完整代码可在线阅读

hessian序列化源码分析

背景     最近在处理一个hessian的反序列化问题时,因为服务端使用了pojo bean中多了一个enum属性,导致客户端在反序列化时疯狂的在打印日志.警告说找不到对应的enum class,因为项目中本身是设置了log4j的根输出为一个文件.      比较奇怪的是,hessian对应的日志输出全都打印到了控制台(虽然我们对console进行了重定向输出),导致对应的文件达到几百MB.无奈之下,仔细分析了下hessian的源码. 介绍   先看一张hessian主要的几个概念图 说明:

浅析若干Java序列化工具

  在java中socket传输数据时,数据类型往往比较难选择.可能要考虑带宽.跨语言.版本的兼容等问题.比较常见的做法有: 采用java对象的序列化和反序列化 把对象包装成JSON字符串传输 Google工具protoBuf的开源 本文章所需要的序列化jar包都可以下载:http://download.csdn.net/detail/u013256816/9439971.   为了便于说明各个做法的区别,分别对这三种做法进行阐述. 对UserVo对象进行序列化,class UserVo如下:

Hadoop序列化系统

本文是我阅读Hadoop 0.20.2第二遍时写的笔记,在阅读过程中碰到很多问题,最终通过各种途径解决了大部分.Hadoop整个系统设计精良,源码值得学习分布式的同学们阅读,以后会将所有笔记一一贴出,希望能方便大家阅读Hadoop源码,少走弯路. 1 序列化核心技术 0.20.2版本Hadoop中的ObjectWritable支持如下几种类型的数据格式序列化: 数据类型示例说明 ObjectWritable.NullInstanceObjectWritable.NullInstance此类型内部

VC 2012编译protobuf的出错处理

近来要学习protobuf的协议生成,需要从网上下载它的代码,从这个SVN地址下载: http://protobuf.googlecode.com/svn/trunk 下载完成之后,就可以到protobuf\vsprojects目录下找到VC2008的工程文件,然后打开工程进行转换,这个没有问题.但在编译过程里会出现两个问题,第一个问题如下: 1>------ Build started: Project: gtest_main, Configuration: Debug Win32 -----

JAVA序列化

什么是序列化和反序列化     Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 什么情况下需要序列化 当你想把的内存中的对象保存到一个文件中或者数据库中时候(数据持久化): 利用序列化实现远程通信,即在网络上传送对象的字节序列: 如何实现序列化     将需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列