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 java 优点 protobuf作用_编译器


protobuf 运行时(runtime)

作用

protobuf 运行时所需要的库,包括生成代码中依赖的库和操作生成代码的库。

Java运行时依赖


<!--If you are using Maven, use the following:-->


Java使用ProtoBuf生成代码


class