ProtoBuf介绍
定义
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
与XML和JSON对比
1.序列化后体积相比Json和XML很小,适合网络传输
2.支持跨平台多语言
3.消息格式升级和兼容性还不错
4.序列化反序列化速度很快,快于Json的处理速度快
特点
1.语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种 语言,支持多个平台 2.高效。 3.扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程 序
.proto 文件
定义
使用 proto语法编写的文本文件, 用来定义数据格式。
作用
当你使用protobuf编译器编译一个.proto文件,它会生成在.proto内你描述的消息类型的操作代码,这些代码是根据你所选择的编程功能语言决定的。这些操作代码内包含了设置字段值和读取字段值,以及序列化到输出流和从输入流反序列化。
示例
addressbook.proto
// See README.txt for information and build instructions.
protobuf 编译器(compile)
作用
将 proto 文件编译成不同语言的实现, 这样不同语言中的数据就可以用 protobuf 格式的数据进行交互。
不同语言编译后说明
C++:编译器会按照每个.proto文件生成与其对应的.h和.cc文件,每个消息类似 都有独立的消息操作类。 Java:编译器将会生成一个.java文件和一个操作类,此操作类为所有消息类型所共有, 使用一个特别的Builder类为每个消息类型实例化。 Python:有一点不同 – 编译器会为每个消息生成一个模块每个模块有一个静态描述符, 该模块与一个元类在运行时创建一个所需数据操作类。
Java举例
=./ addressbook.proto
生成AddressBookProtos.java文件和对应的目录结构:
protobuf 运行时(runtime)
作用
protobuf 运行时所需要的库,包括生成代码中依赖的库和操作生成代码的库。
Java运行时依赖
<!--If you are using Maven, use the following:-->
Java使用ProtoBuf生成代码
class