2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

交易所刷量机器人定制开发,刷k线机器人搭建

量化系统19942438797

交易所 市值机器人

机器学题平台PAI论文入选国际顶会KDD-构建端到端的大规模AI工程能力

阿里云大数据AI技术

“IBP在城市大脑项目中的应用”入选工信部2021年大数据产业发展试点示范项目名单

云计算

GAIA:智能运维领域通用公开数据集

云智慧AIOps社区

算法 AIOPS 数据集 场景 智能运维

TLS协议分析 (六) handshake协议扩展

OpenIM

TLS协议分析 (七) 安全性分析

OpenIM

横空出世!复盘B站面试坑我最深的Java并发:JDK源码剖析

Java~~~

Java 源码 架构 jdk 面试

太强了!京东首席架构师深邃洞察:服务化+云原生+微服务

Java~~~

Java 架构 面试 云原生 架构师

无场景不智能-面向场景的智能运维算法体系

云智慧AIOps社区

算法 日志 场景 智能运维 数据指标

阿里内部架构解密:网络+分布式+RPC+消息中间件+微服务

Java~~~

Java spring 架构 面试 微服务

收藏!阿里P9耗时28天,总结历年亿级活动高并发系统设计手册

Java~~~

Java 架构 面试 高并发 系统

GitHub上标星120K!Alibaba官网发布了这份Java全栈知识体系手册

Java~~~

Java 架构 面试 JVM 多线程

基于深度学习的日志异常检测

云智慧AIOps社区

深度学习 招聘 异常检测 实习 智能运维

数据库是什么意思?有什么用?有哪些类型?

行云管家

数据库 运维 IT

别慌!阿里专家破SpringBoot:入门+基础+进阶+项目

Java~~~

Java 数据库 架构 面试 Spring Boot

无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说

Java~~~

Java 架构 面试 项目 架构师

云智慧AIOps研究院来咯~

云智慧AIOps社区

技术 算法 数据 智能运维 指标

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

LigaAI

测试 UI自动化

CTO离职前悄悄和我说,吃透这5本Java核心技术笔记,涨薪特别简单

Java~~~

Java MySQL spring 架构 面试

27W字总结阿里Java高并发编程:案例+源码+面试+系统架构设计

Java~~~

Java 架构 面试 算法 多线程

云智慧智能研究院实习生招聘信息~只等优秀的你!

云智慧AIOps社区

深度学习 招聘 异常检测 实习 智能运维

Filecoin价格今日走势:filecoin暴涨!Filecoin未来会涨到多少钱?

区块链 分布式存储 filecoin未来价格预测? filecoin价格走势 filecoin大涨

pyhanlp 添加自定义词典(qbit)

qbit

Python nlp 分词

阿里内部最新“SpringCloudAlibaba学习笔记”出炉

Java 阿里巴巴 架构 面试 微服务

C/S结构是什么意思?有什么优点?

行云管家

数据库 运维 IT

百度短视频推荐系统的目标设计

百度Geek说

架构 后端 推荐系统 短视频

必杀器!鹅厂首推569页Netty+Redis+ZK+高并发

Java~~~

Java redis 架构 面试 Netty

一文搞懂音视频开发技术点及职业发展方向

赖猫

c++ android 音视频

加速国产开源软件创新,云智慧AIOps社区正式发布

云智慧AIOps社区

开源 算法 数据 场景 智能运维

10款低/无代码开发平台哪个才是适合你的?

低代码小观

程序员 低代码 无代码 低代码平台 无代码平台

“小巨人”的转型烦恼,百度智能云能否解压?

百度开发者中心

人工智能 企业资讯 中小企业

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