AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

我用 Python 分析了一波热卖年货,原来大家都在买这些东西?

JackTian

Python 数据分析 数据可视化 2月春节不断更 年货

笔记本电脑电池显示4%可用(已接通电源),经过清灰又莫名奇妙的可以续航啦,很奇怪!

孙叫兽

电脑故障 电池

无责任畅想:云原生中间件的下一站

阿里巴巴云原生

容器 微服务 云原生 dubbo 中间件

程序员防猝死指南

小白debug

程序员 职业 内存 打工人 Go 语言

MyChat,一个私有的“微信“

米凤君

Java 微信 Netty IM JavaFx

研发效能,productivity 还是 performance

李小腾

从架构设计理念到集群部署,全面认识KubeEdge

华为云开发者联盟

架构 容器 云原生 集群 kubeedge

第4周左右

林亚超

京东App Swift 混编及组件化落地

京东科技开发者

swift 开发者

使用Travis CI为工程搭建一个持续集成服务。

梁龙先森

大前端 持续集成 2月春节不断更

大作业一

ray-arch

编程范式( Programming paradigm )简介

引花眠

编程范式

ARTS打卡 第30周

引花眠

微服务 ARTS 打卡计划

「产品经理训练营」第四章作业

Sòrγy_じò ぴé

产品经理训练营 极客大学产品经理训练营 产品训练营

第6周作业

Geek_mewu4t

华为 Python网络自动化

艺博东

Python 网络

一看就懂的var、let、const三者区别

蛙人

JavaScript

经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么

飞天小牛肉

程序员 面试 计算机网络 网络协议 2月春节不断更

大作业二

ray-arch

1.1w字,10图,轻松掌握 BlockingQueue 核心原理

马丁玩编程

阻塞队列 图解源码分析 JUC

ZEGO即构自建MSDN有序网络,为实时音视频传输极致顺畅!

ZEGO即构

Redis Sentinel 源码:Redis的高可用模型分析

华为云开发者联盟

数据库 redis 高可用 框架 redis sentinel

图文详解:如何给女朋友解释什么是微服务?

浅羽技术

Java zookeeper 分布式 微服务 框架

大学寒假这样过,过完惊艳所有人,不只是你的宿友,还有千千万万个程序员同行们!!!

沉默王二

程序员

第四章作业(一)

LouisN

对接量化钱包区块链开发

v16629866266

如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!

华为云开发者联盟

JavaScript typescript GitHub React #Serverless

即拼商城模式开发

luluhulian

如何用 4 个小时搭建一个新 “Clubhouse” ,引爆声音社交新风口

阿里云CloudImagine

App 音视频 WebRTC RTC clubhouse

数字化人才有哪些特性?

boshi

数字化转型 七日更

嘿,同学,你要的Java内存模型(JMM)来了

Simon郎

Java 大数据 JVM

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