免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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:414399
用户头像

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

关注

评论

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

必须收藏:20个开发技巧教你开发高性能计算代码

华为云开发者联盟

性能 并发

一个优秀的程序员,不仅要会编写程序,更要会编写高质量的程序

Java架构之路

Java 程序员 架构 性能优化 编程语言

亚马逊向世界各地逾1000家慈善组织捐赠数百万件物资

爱极客侠

晦涩难懂的CAP,是否完全正确?

架构师修行之路

1分钟带你入门React Context

Leo

大前端 React useContext Context

Storage API简介和存储限制与逐出策略

程序那些事

大前端 浏览器 web tech web storage storage api

用Python加载数据的5种不同方式

计算机与AI

Python 数据处理

央视多方视频连线演播厅系统

dwqcmo

音视频 集成架构 解决方案 智能硬件

「2020年字节秋招超万人」那么程序员跳槽时,如何选择公司

Java架构师迁哥

程序员

Flink中CoProcessFunction6-7

小知识点

scala 大数据 flink

LeetCode题解:98. 验证二叉搜索树,使用栈中序遍历,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

发挥区块链技术优势 确保食品安全

CECBC

区块链技术 信任机制

做好提醒巧防范 守好钱包防诈骗——南京移动防通讯信息诈骗志愿者服务进社区

MapReduce简介及过程详解

犟马骝

hadoop mapreduce

被延伸的“五感”:OPPO联合丹拿发起TWS耳机音质革命

脑极体

从资金荒、恒大事件看区块链技术在供应链金融上的应用价值

CECBC

区块链 供应链物流

为什么迫切需要一套直接可落地的中台开发框架

高鹏

中台 业务中台 DDD 中台架构 业务架构

vivo 基于原生 RabbitMQ 的高可用架构实践

vivo互联网技术

高可用 RabbitMQ 中间件

阿里P8架构师“墙裂”推荐:Java程序员必读的架构进阶热门书籍,值得学习!

Java架构之路

Java 程序员 架构 编程语言 推荐书籍

深入剖析 | 字节码增强

九叔(高翔龙)

JVM 字节码插桩 bytecode JVM虚拟机原理 字节码增强

架构师训练营第五周作业

邓昀垚

极客大学架构师训练营

法定数字货币对银行存在潜在冲击,可能是第六版的人民币

CECBC

数字货币 金融

播客有没有未来?

善宝橘

播客

简约而不简单的分布式通信基石

架构师修行之路

TCP 分布式 微服务 udp

【高并发】学好并发编程,关键是要理解这三个核心问题

冰河

并发编程 同步 分工 互斥 签约计划第二季

十九、深入Python匿名函数

刘润森

Python

(转)程序员的写作课

Leo

学习 大前端 技术博客

技术实践丨手把手教你使用MQTT方式对接华为IoT平台 华为云开发者社区

华为云开发者联盟

技术 物联网 mqtt

开始真正的学习吧 -- 2020-10-20

BlueVitamin

架构师训练营第 1 期第 5 周作业

业哥

甲方日常 34

句子

工作 随笔杂谈 日常

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