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

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

关注

评论

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

让万物「听说」:AI 对话式智能硬件方案和发展洞察

声网

什么是 Python 解释器?

克莱因瓶

Python Python解释器

1688店铺所有商品列表接口系列(1688 API)

tbapi

1688API 1688店铺所有商品接口

一年做一次,一次做半年,《DevData 2025研发效能基准报告》再度起航!

思码逸研发效能

研发效能 研发效能度量 研发效能管理 思码逸

搜索技巧的逆袭:在AI统治的世界中寻找价值10分钟让你成为信息获取高手,效率提升300%!6个月构思,10天撰写(上)

AI决策者洞察

人工智能’ Prompt coze

在 DevOps 实践中,如何构建自动化的持续集成和持续交付(CI/CD)管道,以提高开发和测试效率?

思码逸研发效能

DevOps 研发效能 研发效能度量 研发效能管理 思码逸

一种轻量分表方案-MyBatis拦截器分表实践

京东科技开发者

域名解析错误有哪些解决方法?

防火墙后吃泡面

请查收| 京东零售技术AI领域前沿探索-10篇顶会论文合集

京东科技开发者

人工智能在音频、视觉、多模态领域的应用

测试人

人工智能 软件测试

火语言RPA--图鉴打码

火语言RPA

Databend x 沉浸式翻译 | 基于 Databend Cloud 构建高效低成本的业务数据分析体系

Databend

TimechoDB v1.3.4 发布 | 新增模式匹配函数、数据导入导出脚本合并等功能

Apache IoTDB

请查收| 京东零售技术AI领域前沿探索-10篇顶会论文合集

京东科技开发者

WebAssembly视频检测在社区创作平台的落地与实践 | 得物技术

得物技术

算法 前端

人工智能丨视觉识别在自动化测试中的应用

测试人

人工智能 软件测试

请查收| 京东零售技术AI领域前沿探索-10篇顶会论文合集

京东零售技术

字节 GUI 代理模型 UI-TARS:具备像人一样的感知、推理、行动能力;SLAM-Omni:支持可控音色的语音对话模型

声网

2025春招,Spring 面试题汇总

威哥爱编程

spring spring 面试题

热更新适配ibatis原理浅析

京东科技开发者

2025年睡眠展|2025广州国际睡眠家居产品展会

秋硕展览

对象池框架 commons pool2 原理与实践

不在线第一只蜗牛

开发语言 对象池

2025年深圳国际新能源电池及电池材料展会

秋硕展览

Kmesh v1.0正式发布!7大特性提升网络流量管理效率和安全性

华为云开发者联盟

云原生 华为云 服务网格 Kmesh

智源研究院与乐聚机器人成立具身智能联合实验室

智源研究院

国内做TikTok直播带货需要解决什么问题?

Ogcloud

TikTok 直播专线 tiktok直播 tiktok直播专线 tiktok矩阵

5 个适合小型企业使用的管理软件!(真实经验)

NocoBase

开源 低代码 企业管理 管理工具 无代码

广告发布平台(源码+文档+部署+讲解)

深圳亥时科技

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