什么是 Protobuf ?

谷歌推出的一种序列化协议 ,是一种语言无关、平台无关、可扩展的序列化结构数据的方法

什么是序列化?

把对象转换为字节序列的过程称为对象的序列化

为什么要把对象转换为字节序列?

以便存储在文件中或在网络上传输。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

进入正题

Protobuf优点:
  • 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
  • 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
  • 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序
Protobuf的数据序列化能力 > JSON、XML

开始使用

1.首先准备工具  jar包  protoc.exe执行文件

2.编写 Protobuf的配置文件

3.通过编写脚本使用protoc.exe生成 java文件

工具包连接:下载工具包 提取码:pugf

使用

1.新建文件 test.proto
syntax = "proto3";// 指定protobuf版本
option  java_package="com.duihua"; // 指定包名
option  java_outer_classname="UserPB";//指定生成的类名
message  PBTest{
		required int64 id=1; //id
		required int32 age=2; //age
		required string name=3; //name
}

这样一个简单的配置文件就写好了,

syntax = “proto3”:指定protobuf版本
 option java_package=“com.duihua”;: 指定包名
 option java_outer_classname=“UserPB” //指定生成的类名
下面的大家可能陌生
  1. message 好比 java中的 class
  2. required 表示字段类型必须设置
  3. int64 对应java中的long
  4. 等号后面的数字为key值,这些key在同一个message下不能重复

axios 序列化工具_android

2.编写脚本 新建 build.bat
protoc ./test.proto --java_out=./
pause

protoc:表示使用 protoc.exe 执行

./test.proto :表示 当前目录下的 test.proto 也就是我们刚刚编写的

java_out: 表示生成java文件

./:表示 生成到当前目录

编写好后 双击运行 我们就会看到生成的文件了,这就是我们需要的 Protobuf的java文件

工具包中的jar包 ,放入 libs文件下 添加到项目中
/**
	 * 序列化
	 */
	public static byte[] toBytes(){
		//获取一个PBPlayer的构造器
		Builder builder = UserPB.PBTest.newBuilder();
		//设置数据
		builder.setPlayerId(101).setAge(20).setName("duihua");
		//构造出对象
		PBTest player = builder.build();
		//序列化成字节数组
		byte[] byteArray = player.toByteArray();
		
		System.out.println(Arrays.toString(byteArray));
		
		return byteArray;
	}
/**
	 * 反序列化
	 */
	public static void toPlayer(byte[] bs) throws Exception{
		
		 PBTest player = UserPB.PBTest.parseFrom(bs);
		 
		 System.out.println("Id:" + player.getPlayerId());
		 System.out.println("age:" + player.getAge());
		 System.out.println("name:" + player.getName());
	
	}

Protobuf的基本使用就完了,如果对你有用,记得点赞!手敲不易!