Google Protocol Buffer

Protobuf是一种灵活高效的、用于序列化结构化数据的机制,类似于XML,但比XML更小且更简单。Protobuf序列化为二进制数据,不依赖平台和语言,同时具备很好的兼容性。

在移动应用中,客户端与服务器之间的通信协议,主流的有Facebook的Thrift、腾讯的JCE、Google的Protocol Buffer。Protobuf是Google公司内部使用的混合语言的数据标准。

Protobuf最初是在Google开发的,用来解决索引服务器的请求、响应协议。由于之前采用了一种格式用来处理请求和响应的数据的编码和解码,并支持多个版本,导致了代码丑陋且不易于维护。同时,通信协议也变得越来越复杂。因为,开发者必须确保发出请求的人和接收请求的人必须同时兼容,并且一方开始使用新协议时,另一方也可以接受。Protobuf的设计与诞生是为了解决这一类问题:

  • 方便引用新字段,中间服务器可以忽略这些字段,直接传输过去而无需理解所有的字段。
  • 格式可以自描述,并能在多种语言中使用。

随着Protobuf的发展它拥有了一些其他特性

  • 自动生成编码和解码的代码,而无需自己编写解析器。
  • 除了用于简短的RPC(Remote Procedure Call)请求外,可用来做数据存储格式。
  • RPC服务器接口可作为.proto文件来描述,通过Protobuf编译器生成的存根类可供用户实现服务器接口。

在不同的计算机语言中,数据结构、对象、二进制串的表示方式并不相同。在面向对象的语言中,对象是类的实例化,例如Java中最接近数据结构的是POJO(Plain Old Java Object)或JavaBean。在半面向对象的语言如C++中,对象等同于类,数据结构等同于结构体。

对于二进制串来说,在C++中因为具有内存操作符,所以C++的字符串可以直接被传输层使用,因为它本质上就是\0结尾的存储在内存中的二进制串。而对于Java来说,二进制串等同于字节数组。

二进制数据流

二进制数据流采用T-L-V的数据存储方式,即”标识-长度-字段值“Tag-Length-Value的形式表示单个数据,所有数据拼接成一个字节流,从而实现数据存储的功能。其中length是可选存储,如存储varint编码的数据就无需存储length

二进制数据流

采用T-L-V的存储方式的优点在于无需分隔符就能分开字段,减少了分隔符的作用。其次,各个字段存储的非常紧凑,存储空间利用率非常高。若字段没有被设置字段值,那么该字段在序列化的数据中是完全不存在的,也就不需要为它编码。相应的,字段在解码时才会被设置为默认值。

序列化与反序列化

序列化和反序列化属于通讯协议的一部分,通讯协议分层模型中,序列化和反序列化位于TCP/IP的应用层。

  • 序列化是将数据结构或对象转化为二进制字符串的过程
  • 反序列化是将二进制字符串转化为数据结构或对象的过程
序列化与反序列化

Protobuf是一种独立于开发语言,独立于平台的可扩展的结构化数据序列机制,是一种数据交换格式的协议。Protobuf通过将结构化的数据进行序列化,从而实现数据存储和RPC数据交换的功能。

Protobuf、JSON、XML的区别

  • Protobuf序列化后数据不是可读的字符串而是二进制
  • XML和JSON格式的数据信息都包含在序列化后的数据中,无需任何其他信息就能还原序列化之后的数据。Protobuf需要事先定义好数据格式(.proto协议文件),还原一个序列化后的数据需要使用已定义好的数据格式。
  • 在传输数据量较大的需求场景下,Protobuf比XML、JSON更小(310倍)、更快(20100倍)、使用维护更为简单。
  • Protobuf可以跨平台跨语言
Protobuf特点

Protobuf的应用场景主要在传输数据量大、网络环境不稳定的数据存储、RPC数据交换的场景,如即时通讯的领域。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容