目录 Proto文件 序列化 二进制文件解析 反序列化 参考 博客:blog.shinelee.me | 博客园 | CSDN 这篇文章中,我们将定义一个相对复杂的数据结构,直接分析其序列化后的二进制文件. Proto文件 编写addressbook.proto文件,在官方例子上略作修改,增加了float字段,以分析浮点数的存储方式. syntax = "proto2"; package tutorial; message Person { required string name =…
背景 一个简单的代理程序,发现单核QPS达到2万/s左右就上不去了,40%的CPU消耗在pb的decode/encode上面. 于是我想,对于特定的场景,直接从[]byte中取出字段,而不用完全的把整个结构在内存展开,岂不是要快很多. so, 温习了一些PB二进制格式的知识. pb的二进制格式: 参考的文章有: Google Protobuf 编码原理 Protocol Buffers(3):阅读一个二进制文件 几个关键点总结如下: 5 bit的 field index 3 bit的wire t…
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元.  -----------------------------------------------------------------------------------…
Protocol Buffers是Google开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储.通信协议等方面. 不了解Protocol Buffers的同学可以把它理解为更快.更简单.更小的JSON或者XML,区别在于Protocol Buffers是二进制格式,而JSON和XML是文本格式. 相对于XML,Protocol Buffers的具有如下几个优点: 简洁 体积小:消息大小只需要XML的1/10 - 1/3: 速度快:解析速度比XML快20 - 100倍: 使用Proto…
目录 序列化与反序列化 Protocol Buffers概览 Protocol Buffers C++ 编译 Protocol Buffers C++ 使用 Protocol Buffers的可读性 参考 博客:blog.shinelee.me | 博客园 | CSDN Protocol Buffers docs:https://developers.google.com/protocol-buffers/docs/overview github:https://github.com/proto…
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com protobuf Protocol Buffers 简介 案例 目录 目录简介优缺点proto3简介使用步骤下载 protobuf 编译器编写 .proto 文件编译 .proto 文件生成 java 类项目中添加 protobuf runtime测试 java 类在 Android 中使…
Protocol Buffers(Protobuf)开发者指南---概览 欢迎来到protocol buffers的开发者指南文档,protocol buffers是一个与编程语言无关‘.系统平台无关.可扩展的结构化数据序列化/反序列化工具,适用于通讯协议,数据存储等场合. ps:为了方便拼写,下文的protobuf就是指protocol buffers. 本文档的面向读者是:希望使用protobuf的 Java.C++.Python的开发者.此概览将向您介绍如何开始使用protobuf,然后您…
基本概念 Protocol Buffers(以下简称PB)是一种独立于语言.独立于开发平台.可扩展的序列化数据结构框架,它常常被用在通信.数据序列化保存等方面. PB是一种敏捷.高效.自动化的用于对数据进行序列化的框架.同XML比较,比XML更小.更快.更简单.你一旦定义了期望的数据结构,就可以根据定义生成特定的源码,从而轻而易举地对你的数据进行读写操作,你甚至可以在不修改原来的程序源码的情况下,更新自己的之前定义的数据结构. PB与其他协议的比较 语言: PB与Json都是跨语言的,PB支持C…
什么是 protocol buffers ? Protocol buffers 是一种灵活.高效的序列化结构数据的自动机制--想想XML,但是它更小,更快,更简单.你只需要把你需要怎样结构化你的数据定义一次,你就能使用特殊生成的代码来方便的用多种语言从一系列数据流中读写你的结构化数据.你甚至不需要中断你用"老"结构编译好的已经部署的程序来更新你的数据结构. 它是怎样工作的? 你在一个名为.proto的文件里用protocol buffer message 定义你需要序列化数据的结构.每…
Protocol Buffers编码详解,例子,图解 本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路.如果你详细了解此文,你应该就能具备自己造一套编解码轮子的能力(至少基本思路). 测试的例子 阅读图片时请对比前面的例子和表格.每个字段的名称都是包含了tag的. message S2 { optional int32 s2_1 =…
目录 Message Structure 解码代码一窥 varint Protobuf中的整数和浮点数 Length-delimited相关类型 小结 参考 博客:blog.shinelee.me | 博客园 | CSDN Message Structure 在上一篇文章中我们提到,对于序列化后字节流,需要回答的一个重要问题是"从哪里到哪里是哪个数据成员". message中每一个field的格式为: required/optional/repeated FieldType Field…
简要介绍和总结protobuf的一些关键点,从我之前做的ppt里摘录而成,希望能节省protobuf初学者的入门时间.这是一个简单的Demo. Protobuf 简介 Protobuf全称Google Protocol Buffers http://code.google.com/p/protobuf 结构化数据存储格式(xml, json) 用于通信协议.数据存储等 高效的序列化和反序列化 语言无关.平台无关.扩展性好 官方支持C++, Java, Python三种语言 .proto文件 定义…
本文来自网易云社区. FlatBuffers编码数组 编码数组的过程如下: 先执行 startVector(),这个方法会记录数组的长度,处理元素的对齐,准备足够的空间,并设置nested,用于指示记录的开始. 然后逐个添加元素. 最后 执行 endVector(),将nested复位,并记录数组的长度. public void startVector(int elem_size, int num_elems, int alignment) { notNested(); vector_num_e…
protocol buffers 使用方法 为什么使用 Protocol Buffers 我们接下来要使用的例子是一个非常简单的"地址簿"应用程序,它能从文件中读取联系人详细信息.地址簿中的每一个人都有一个名字.ID.邮件地址和联系电话. 如何序列化和获取结构化的数据?这里有几种解决方案: 以二进制形式发送/接收原生的内存数据结构.通常,这是一种脆弱的方法,因为接收/读取代码必须基于完全相同的内存布局.大小端等环境进行编译.同时,当文件增加时,原始格式数据会随着与该格式相关的软件而迅速…
欢迎来到 protocol buffers 的开发者指南.protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法. 本文档主要针对的是 Java,C++ 或 Python 的开发人员希望在开发的应用程序中使用 Protocol Buffers.这个有关 Protocol Buffers 摘要性的介绍将会告诉你如何开始使用 Protocol Buffers.如果你希望更加深入的了解有关 Protocol Buffers 的内容,…
0.说明 ProtoBuf3语法指南, 又称为proto3, 是谷歌的Protocol Buffers第3个版本. 本文基于官方英文版本翻译, 加上了自己的理解少量修改, 一共分为上下两部分. 1.序言 本指南描述了如何使用protocol buffer语言来构造protocol buffer数据, 包括编写.proto文件的语法, 以及如何从.proto文件生成数据访问类. 本文涵盖了protocol buffer语言的proto3版本语法, 而有关proto2版本语法的信息, 请参阅prot…
简介 现在我们Web API项目基本上都是使用的Json作为通信的格式,随着移动互联网的兴起,Web API不仅其他系统可以使用,手机端也可以使用,但是手机端也有相对特殊的地方,网络通信除了wifi,还有蜂窝网络比如2G/3G,当手机处于这种网络环境下并且在一些偏僻或者有建筑物阻挡的地方,网络会变得非常差,之前我有测试过ProtoBuf和Json在序列化和反序列化上性能的对比,通过测试发现ProtoBuf在序列化和反序列化以及序列化后字节的长度和其他的框架相比都有很大的优势,所以这篇文章准备让W…
简介 这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比,Xml和Json的基本概念就不说了. Hessian:Hessian是一个轻量级的remoting onhttp工具,提供了RMI的功能,采用的是二进制RPC协议,内置了序列化功能. Protocol Buffers:google的一种数据交换的格式,它独立于语言,由于它是一种二进制的格式,比使用 xml 进行数据交换快许多,可以把它用于分布式应用之间的数据通信或者异构环境下的数…
Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于对比他与一些序列化的对比这里就不再赘述.这里主要说一下在C#/dotNet里是怎么运行的. 1.下载google-protobuff的源码或者直接去下载别人编译好的dll也可以.如果是源码在VS2015里编译一下如果没有问题会生成Google.Protobuf.dll 2.定义数据结构,注意这里定义…
[http://blog.csdn.net/zhu_xun/article/details/19397081] protocol buffers的使用示例 如果不了解protocol buffers,可以先参看:http://blog.csdn.net/zhu_xun/article/details/19343079 本例的protobuf的版本为2.5.0,运行环境为windows平台(当然,在Linux下使用的方法也一样,只不过是使用shell脚本驱动protobuf程序的运行) 下载pro…
一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力强,可以通过ChannelHandler对通信框架进行灵活的扩展:4)性能高,通过与其它业界主流的NIO框架对比,Netty的综合性能最优:5)成熟.稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼:6)社区活跃,版本迭代周期短,发现的BUG可以…
Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南 约定:为方便书写,ProtocolBuffers在下文中将已Protobuf代替. 本指南将向您描述如何使用protobuf定义i结构化Protobuf数据,包括.proto文件语法和如何使用.proto文件生成数据存取类. 作为一个参考指南,本文档将以示例的形式一步步向您介绍Protobuf的特点.您可以参考您所选择的语言的示例.tutorial ----------------------------…
安装 protoc (The protocol compiler)是由C++写的,支持的 C++.Java.Python.Objective-C.C#.JavaNano.JavaScript.Ruby.PHP 的实现都在 https://github.com/google/protobuf 这个项目中, 例外的是 Go 的实现是在 https://github.com/golang/protobuf 这里. 所以Go 支持 Protocol Buffers的安装需要下面三步: Install t…
Protocol Buffers是谷歌定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高.感兴趣的可以访问这里.Protocol Buffers官方只支持C++, Java, Python, C#, Go,如果想在PHP中使用Protocol Buffers,需要借助于第三方的扩展,使用方法如下. 安装protoc编译器 第一步,安装Google的protoc编译器,这个工具可以把pr…
http://blog.csdn.net/socoolfj/article/details/3855007 最新版本的Hadoop代码中已经默认了Protocol buffer作为RPC的默认实现,原来的WritableRpcEngine已经被淘汰了.来自cloudera的Aaron T. Myers在邮件中这样说的"since PB can provide support for evolving protocols in a compatible fashion."   proto…
Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XML,只是protobuf生成的是字节码,可读性比XML差.相似的还有json.Java的Serializable等. protobuf支持各种语言.本文以Java为例.简介protobuf怎样使用. 其它语言用法相似. 首先须要下载: http://download.csdn.net/downloa…
今天来介绍一下“Protocol Buffers”(下面简称protobuf)这个玩意儿.本来俺在构思“生产者/消费者模式 ”系列的下一个帖子:关于生产者和消费者之间的传输数据格式.因为里面扯到了protobuf,想想干脆单独开一个帖子算了. ★protobuf是啥玩意儿? 为了照应从没听说过的同学,照例先来扫盲一把. 首先,protobuf是一个开源项目(官方网站在“这里 ”),并且是后台非常硬的开源项目.网上现有的大部分(至少80%)开源项目,要么是某人单干.要么是几个闲杂人等合伙搞.而pr…
今天来介绍一下"Protocol Buffers"(以下简称protobuf)这个玩意儿.本来俺在构思"生产者/消费者模式"系列的下一个帖子:关于生产者和消费者之间的数据传输格式.由于里面扯到了protobuf,想想干脆单独开一个帖子算了. ★protobuf是啥玩意儿?  为了照顾从没听说过的同学,照例先来扫盲一把. 首先,protobuf是一个开源项目(官方站点在"这里 "),而且是后台很硬的开源项目.网上现有的大部分(至少80%)开源项目,…
Protocol Buffers是Google跨语言.跨平台的通用序列化库.FlatBuffers同样出自Google,而且也跨语言跨平台,但更强调效率,专门为游戏开发打造.在游戏界混了几年,各种各样的序列化协议都见过,MUD的字符串.Json.二进制.Protocol Buffers,各有各的优缺点. Protocol Buffers采用的是单个字段压缩到数组的方式.例如: message CPing { int32 x = 1; int32 y = 2; int32 z = 3; int32…
1. 前言 Protocal Buffers是google推出的一种序列化协议.由于它的编码和解码的速度,已经编码后的大小控制的较好,因此它常常被用在RPC调用中,传递参数和结果.比如gRPC. Protocal Buffers的实现非常简单,本文将对比JSON协议,来聊聊Protocol Buffers的实现以及它高性能的秘密 2. 正篇 2.1 减少传输量(字段名和定界符) 汽车类在Golang中的定义 type Car struct { Age int32 `json:"age"…