> 文章列表 > Java 中使用 protobuf

Java 中使用 protobuf

Java 中使用 protobuf

主要参考:

Java 中使用 protobuf :入门基础篇,看这篇就够了!
https://blog.csdn.net/wxw1997a/article/details/116755542

Java 中使用 protobuf :复杂深入篇,看这篇就够了!
https://blog.csdn.net/wxw1997a/article/details/116758401

Springboot整合protobuf-参考这个有代码可以直接使用和跑起来
https://blog.csdn.net/u013219624/article/details/83152806


Protobuf 基本原介绍
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。

Protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。
Protobuf 使用的时候必须写一个 IDL(Interface description language)文件,在里面定义好数据结构,只有预先定义了的数据结构,才能被序列化和反序列化。其中,序列化是将对象转换二进制数据,反序列化是将二进制数据转换成对象。

编码
ProtoBuf 编码格式类似于TLV 格式(Tag | Length | Value),Tag为字段唯一标识,Length为Value域的长度,Value为数据本身。其中,Tag由field_number和wire_type两个部分组成,field_number是message定义字段时指定的字段编号,wire_type是ProtoBuf 编码类型,根据这个类型选择不同的 Value 编码方案。wire_type最多可表达8种编码类型(因为是3bit的),目前已经定义了六种(Varint,64-bit,Length-delimited,Start group,End group,32-bit,其中Start group和End group已经弃用)。
在ProtoBuf 中,Length是可选的,即有些类型的数据结构编码后格式是(Tag | Value),如Varint,64-bit和32-bit。为确定这种格式的数据边界引入了Varint编码。
使用过程
第一步,创建 .proto 文件,定义数据结构。
第二步,protoc 编译 .proto 文件生成读写接口
第三步,调用接口实现序列化、反序列化以及读写

参考资料:
https://zhuanlan.zhihu.com/p/451390348