protobuf的简介
Protocol buffers是用于序列化结构化数据的灵活、高效、自动化的机制——比如XML,但是更小、更快、更简单。您只需定义一下希望如何对数据进行结构化,然后就可以使用特殊生成的源代码来轻松地编写和读取到各种数据流中的结构化数据,并使用各种语言。你甚至可以更新你的数据结构,而不必破坏那些被编译为“旧”格式的程序。
Google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。Google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。
Google 提供了多种语言的实现:Java、c#、c++、Go 和 Python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
1、.proto文件是protobuf一个重要的文件,它定义了需要序列化数据的结构。使用protobuf的3个步骤是:
第一步,在.proto文件中定义消息格式
第二步,用protobuf编译器编译.proto文件
第三步,用C++/Java等对应的protobuf API来写或者读消息
官方文档:
https://developers.google.com/protocol-buffers/docs/overviewprotobuf的安装
protoc的源码和各个系统的预编译包:
https://github.com/protocolbuffers/protobuf/releases1、选择对应的安装文件下载
2、添加到环境变量中
安装完成!
protobuf的使用方法
1、基本用法
protoc --version #查看protoc的版本
2、代码转换显例
切换到要使用的proto文件路径下,并打开cmd窗口执行以下命令
protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto
此处生成时会以 proto 里面注明的java_package为路径完整生成,所以目标地址不必包含java_package及之后的路径,比如:option java_package = "com.test.protocol";,那么就会生成com/test/protocol/XXX.java
参数说明
-I:主要用于指定待编译的 .proto 消息定义文件所在的目录,即可能出现的包含文件的路径,该选项可以被同时指定多个。此处指定的路径不能为空,如果是当前目录,直接使用.,如果是子目录,直接使用子目录相对径,如:foo/bar/baz,如果要编译的文件指定的文件路径为baz/test.proto,那么应这么写-I=foo/bar,而不要一直写到baz。
比如执行命令:
protoc -I=. --java_out=../../../../ beans/*.proto apis/*.proto *.proto