写点什么

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

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

关注

评论

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

新思科技解析Repo Jacking依赖仓库劫持如何影响供应链安全

InfoQ_434670063458

漏洞 新思科技 软件供应链 Repo Jacking

从Core Dump中提取CUDA的报错信息

OneFlow

深度学习 报错 cuda

私有化部署的企业IM:实现工作消息、文件的全面可控

BeeWorks

参加前端培训后再就业难吗?

小谷哥

艺术收藏NFT系统开发:NFT功能搭建

开源直播系统源码

数字藏品 数字藏品系统软件开发 数字藏品开发

[教你做小游戏] 展示斗地主扑克牌,支持按出牌规则排序!支持按大小排序!

HullQin

CSS JavaScript html 前端 9月月更

微服务网关Gateway实践总结

Java 架构

客随主便-Mysql主从同步是怎样的过程?

知识浅谈

redis主从 9月月更

程序员“反内卷”大法——和无效加班说再见!

博文视点Broadview

IDEA配置tomcat

楠羽

#开源

架构师的十八般武艺:合规架构

agnostic

企业架构 合规

大数据培训是否可以延迟工作周期

小谷哥

超大模型工程化实践打磨,百度智能云发布云原生 AI 2.0 方案

百度Geek说

云原生 人工智能’ 企业号九月金秋榜

【算法实践】一天路走到黑--手把手带你实现坚持不懈的线性查找

迷彩

Python 数据结构 算法实践 8月月更 线性查找

自然语言处理--神经网络的复习

IT蜗壳-Tango

自然语言处理 nlp 9月月更

基于Vue3常用代码块

青柚1943

typescript Vue3 Element Plus Pinia sortablejs

【案例回顾】春节一次较波折的MySQL调优

京东科技开发者

MySQL 数据库 索引 RDS 调优

移动办公平台如何在企业中发挥数字化优势?

BeeWorks

如何在保护用户隐私的同时实现精准广告投放?

HarmonyOS SDK

广告sdk

web前端培训入门难吗?

小谷哥

金融科技创新者的困境

木风

金融科技 数字化转型 科技创新

阿里云高性能计算负责人何万青:阿里云大计算加速HPC与AI融合

阿里云弹性计算

AI HPC 高性能计算 无影云电脑 计算巢

定时任务报警通知解决方案详解

阿里巴巴云原生

阿里云 微服务 云原生 定时任务

java培训程序员靠技术来延长自己的职业周期

小谷哥

go语言逆向技术之---常量字符串解密

sofiya

iofod导入任意前端资产,以 Element UI 为例

iofod jude

小程序 前端 低代码 网页

web前端培训程序员学习什么呢

小谷哥

云原生游戏第 2 讲:OpenKruiseGame 设计理念详解

阿里巴巴云原生

阿里云 容器 云原生 游戏 OpenKruiseGame

MobTech SMSSDK iOS端快速集成指南

MobTech袤博科技

ios sdk

2022年中国证券行业智能投顾专题分析

易观分析

金融 证券

Java进阶(一)内存解析

No Silver Bullet

Java 9月月更 内存解析

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