写点什么

Google 发布新版本的 Protocol Buffers

  • 2009-05-21
  • 本文字数:1281 字

    阅读完需:约 4 分钟

Google 发布了新版本的 protocol buffers -一种可扩展的序列化结构化数据的方式,语言中立,平台中立并被用于通信协议,数据存储等许多方面。这一版本的变更在变更记录里进行了概要描述。

protocol buffers 是一个灵活的,高效的,用于序列化结构化数据的自动机制 - 想想 XML,但更小巧,快捷和简单。你只需要一次性定义好你希望数据如何被组织,然后你可以用特别生成的源代码使用各种各样的语言方便地对多种多样的数据流进行读和写。你甚至可以在不破坏以“旧”格式编译的已部署的程序的情况下,更新你的数据结构。

发布的文档来看;常见的跨进程 / 机器界线序列化对象的技术有:

  • 本地序列化,以所使用语言比如 Java,C++ 等等的本地实现来序列化对象
  • 使用自定义的序列化格式来进行序列化
  • 将数据序列化为 XML

这些方案每个都有其自身的问题存在,比如本地序列化意味着在序列化管道的末端必须是同样的平台,以保证能实体化序列化的对象,XML 被认为是一种冗长而效率低下的序列化格式,而自定义序列化格式会因开发一次性的语法分析器而带来成本的增加。

Protocol buffers 的目标就是针对这一问题的灵活,高效而自动的解决方案。利用 protocol buffers,你对需要存储的数据结构编写一个.proto 描述文件。Protocol buffer 编译器据此创建一个实现自动编码的类并且以一种高效的二进制格式来分析 protocol buffer 数据。所生成的类为组成 protocol buffer 的字段提供了 getter 和 setter, 并且处理了将这一 protocol buffer 作为单元来读取和写入的细节. 更重要的是,protocol buffer 格式支持随着时间对格式进行扩展的概念,以这种方式代码仍然可以读取以旧格式编码的数据。

Protocol buffers 支持如下的可以被“对象”图表达的基本数据类型

  • 基本的 128 Varint 表示-int32,int64,uint32,uint64,sint32,sint64,bool,enum(Varints 是使用一个或多个字节来序列化整数的一种方法。小的数值占用更小的字节。)
  • 固定大小的 64 位表示-fixed64,sfixed64,double
  • 固定大小的表示-string,bytes,嵌入消息,打包的重复字段
  • 固定大小的 32 位表示-fixed32,sfixed32,float

一个序列化单元是一条包含由基本数据类型或嵌入消息所组成字段的消息。Protocol buffers 支持可选的,必需的和重复的字段。一个使用 protocol buffers 来定义的地址簿消息看起来可能像这样

复制代码
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}

消息定义语言的特性在语言指南里面作出了描述。当使用 protocol buffer 编译器进行编译时,编码器和语法分析器用一种私有的高效序列化格式产生。当前的发布版包括了编译器以及用于C++,Java 和Pyhon 的API。同时还有社区项目力图为Protocol Buffers 加入新的语言实现,包括Perl,C#,以及Ruby。

查看英文原文: Google Releases New Version Of Protocol Buffers

2009-05-21 20:414783
用户头像

发布了 133 篇内容, 共 42.7 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

拼多多电商部java岗三面落选,记下的面试题,不睡觉都要背下来!

Java 程序员 架构 面试

勒索病毒卷土重来?看亚马逊云科技如何保护你的网络安全!

亚马逊云科技 (Amazon Web Services)

算法如何促成亿级别扶持曝光视频?爱奇艺Budget Pacing智能扶植系统实践

爱奇艺技术产品团队

架构 推荐 算法 广告 扶植

全栈程序员这个月写了啥代码?

程序员鱼皮

Java JavaScript 大前端 后端 全栈

【得物技术】JS资源分包

得物技术

CSS 大前端 js 版本 页面

聊聊MySQL全局锁

架构精进之路

MySQL 6月日更

VRIO模型 - 发现自己的核心资源与能力

石云升

创业 职场经验 管理经验 6月日更

dubbo使用curator作为zk客户端优雅停机存在的问题

林一

zookeeper dubbo curator

极光开发者周刊【No.0604】

极光GPTBots-极光推送

程序员 开发者 IT行业

《原则》(四)

Changing Lin

Nacos-- docker搭建

是老郭啊

Docker nacos

贝特瑞新能源汽车的速度与激情

亚马逊云科技 (Amazon Web Services)

字节跳动的ToB生意,为什么需要火山引擎?

ToB行业头条

3D场景搭建的隐秘功能——时间轴

ThingJS数字孪生引擎

大前端 物联网 可视化 3D可视化 数字孪生

理解【Apache Zookeeper】

awen

zookeeper

深入理解iOS图文混排原理并自定义图文控件

Geen练

图文混排 iOS Developer iOS 知识体系

【环球网】博睿数据CEO冯云彪:做好生态链企业的适配工作

博睿数据

博睿数据 博睿数据数据链DNA 生态链

Polkadot“升级”之道

趣链科技

区块链 区块链技术 polkadot

Java“圣经”学累了?那就看看这些通俗易懂的内容吧

Java架构师迁哥

区块链作为“信任的机器”,将改变社会价值的传递方式

CECBC

我们并不需要 Deno

LeanCloud

node.js deno 开发工具 JavaScrip

农业SaaS,「无人关注」的万亿市场

ToB行业头条

一些有意思的句子

IT蜗壳-Tango

IT蜗壳 6月日更

博睿数据深化信创布局,通过华为鲲鹏920和统信UOS测试认证

博睿数据

信创 国产化 博睿数据

博睿数据重塑APM,引领IT运维新标杆

博睿数据

博睿数据 数据链DNA 服务可达

架构实战营模块5作业

En wei

架构实战营

博云容器云 3.2 发布:核心能力再提升,易用性再升级

BoCloud博云

容器

【立刻报名】加速开发 Perforce on Tour China 2021-龙智

龙智—DevSecOps解决方案

拍乐云运维专家受邀QECon大会,畅谈多云环境伸缩实践

拍乐云Pano

Nacos--简介

是老郭啊

微服务 nacos 服务注册与发现

从天而降的AI“青云梯”,开发者们准备好了吗?

白洞计划

Google发布新版本的Protocol Buffers_SOA_Dilip Krishnan_InfoQ精选文章