HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

OpenYurt v1.0 正式发布!一文了解三大社区 SIG 重点更新

阿里巴巴云原生

阿里云 开源 云原生 openyurt 版本升级

Kubernetes 安全专家(CKS)考试技巧

HummerCloud

Kubernetes 云原生 考试经验 CKS 10月月更

EMQ走进富士康,探讨新生态模式下智能制造与智能汽车基础架构的未来

EMQ映云科技

车联网 物联网 IoT emqx 10月月更

软件测试校招面试真题 | 面试官必问面试题之你有什么想问我的?

测试人

如何在 SAP Business Application Studio 里创建 SAP UI5 应用并部署到 BTP 平台上

汪子熙

云原生 云平台 SAP 10月月更

好文分享 | 记一次Oracle12c数据库SQL短暂缓慢问题分析

墨天轮

数据库 oracle 性能优化 征文投稿

MASA MAUI Plugin (四)条形码、二维码扫描功能

MASA技术团队

MASA MAUI MASA Blazor

云管理工具是干什么的?有哪些?哪个品牌好?

行云管家

云计算 云管理 云工具

【云安全】云安全产品有哪些?哪个品牌好?

行云管家

云计算 网络安全 安全 云安全

Linux 各个Namespace 的作用

忙着长大#

linux namespace

StartDT奇点云邀您参加2022云栖大会,11月3-5日杭州见

奇点云

云栖大会 奇点云

Windows Server 2008 R2将tomcat添加进系统服务

我爱娃哈哈😍

tomcat windows 服务器运维

观测云获亚马逊云科技年度 DevOps 合作伙伴奖

观测云

火力全开-Precision 7670触顶性能天花版

科技热闻

Qt | QList的removeAt、takeAt的区别

YOLO.

qt 10月月更 C++

峰会回顾 | 基于StarRocks,百草味如何通过数据赋能快消品行业

StarRocks

#数据库

跑批为什么这么难

陈橘又青

uniapp实现国际化多语言切换

源字节1号

软件开发

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

矜辰所致

Linux 10月月更 文件结构

C# TreeView控件方法属性学习

IC00

C# 学习 程序员 上位机 10月月更

小白必看——台式机选购指南

科技热闻

以开发之名|斗罗大陆:创造一个尽情探险的开放式游戏世界

HarmonyOS SDK

华为 HMS Core

数据结构学习,稀疏矩阵(三元组和十字链)

IC00

学习 数据结构 算法 学习笔记 10月月更

校招面试真题 | 和面试官聊的很 high,但就是拿不到 offer,怎么办?

霍格沃兹测试开发学社

技术贴 | 走进 PostgreSQL 行级安全策略

KaiwuDB

时序 #数据库

如何利用Java在Word中创建表格

Geek_249eec

Java word 表格

训练营 | 如何成为一名开源社区贡献者?

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

CEF | CEF浏览器客户端功能扩展:实现与JS交互的功能

YOLO.

qt 10月月更 C++

区服分析丨更透彻的游戏营运数据解读,助力高效增长

HarmonyOS SDK

分析

IM跨平台技术学习(五):融云基于Electron的IM跨平台SDK改造实践总结

JackJiang

Qt|使用QDialog窗口调用exec时崩溃解决问题

中国好公民st

c++ qt 10月月更

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