[protobuf 笔记]01- 认识 protobuf
Protocol Buffer 简称 Protobuf 。 是 Google 出品的性能优异、跨语言、跨平台的序列化库。
序列化
序列化,就是将数据结构或对象的状态转换成可以存储或传输的格式。比如将数据存储为文件,或存储到内存中。传输的格式,比如网络传输。
反向操作就是反序列化。
Protobuf 历史
proto1 :初代版本,仅在 Google 内部使用,且几乎所有开发者都会使用它。
proto2 :由于依赖关系,Google 将其开源。开发者重写了 Protobuf 的实现,保留了 Proto1 的设计,开源的 Protobuf 不依赖任何库,代码更清晰。
proto3 :简化 proto2 的开发,提高了开发的效能,但是存在和 proto2 不兼容的问题
Protobuf 优势
经常在项目中使用最多的是在 HTTP 请求时会使用 JSON/XML 格式进行传输。当然还有很多其他格式,可能你接触的比较少。比如,BSON、Thrift、Avro 等等。
在对比各种序列化库,包含对比序列化和反序列化的性能,以及序列化后的数据大小。总体来说,有很多很有利的优势:
Protobuf 序列化和反序列化的性能是最高的。
protobuf 是二进制格式,所以编码后的数据比 json/xml 还小。
目前 Protobuf 支持很多语言,也是支持跨平台,被广泛应用。
安装 Protobuf 编译器
安装
方法一:从 github 上下载编译器:github 发布地址: github.com/protocolbuf…
方法二:也可使用
brew
编译成指定语言类库
protoc 编译器支持将 proto 文件编译成多种语言版本的代码。生成类库的命令:
--proto_path=IMPORT_PATH
:可以在 .proto 文件中 import 其他的 .proto 文件,proto_path 即用来指定其他 .proto 文件的查找目录。如果没有引入其他的 .proto 文件,该参数可以省略。--<lang>_out=DST_DIR
:指定生成代码的目标文件夹,例如 –go_out=. 即生成 GO 代码在当前文件夹,另外支持 cpp/java/python/ruby/objc/csharp/php 等语言
下一篇详细说明各语言类库生成方法。
Protonuf Demo
新建一个 demo.proto 文件
第一行,指定 protobuf 的版本,如果没有指定版本将默认是 proto2 格式。
定义了一个 message 类型的数据结构:SearchRequest。
参考资料
一些其他的资料:
版权声明: 本文为 InfoQ 作者【南吕】的原创文章。
原文链接:【http://xie.infoq.cn/article/a37db7141a81aea801872e895】。文章转载请联系作者。
评论