Netty序列化协议Protocol buff
序列化协议
序列化和反序列化
把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。用途:文件的copy、网络数据的传输
Protocol buff(代替JSON)
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
相比较Java自带的序列化方式:更加高效,但是客户端和服务器端都需要使用配置文件。它对字节具有伸缩性,避免了Java数据类型固定大小而造成空间的浪费。
Protocol buff的使用
//定义class user的Protocol buff的文件
//定义包名
option java_package = "com.proto";
//一个模块下可以生成多个类,方便管理
option java_outer_classname="userModule";
message user
{
//参数需要定义一个默认值 每个参数都不能一样
required int64 Id=1; //int64 对应Java的 Long
required int32 age=2; //int32 对应Java的 Int
required string name=3; //string 对应Java的String
repeated int32 skills=4; //这里repeated对应Java的List
}
message MoreDetails
{
required string sex=1;
}
使用批处理的方式利用 .proto文件生成 class文件(要带有protoc.exe文件)
新建build.bat文件
protoc ./*.proto --java_out=./
pasue
序列化
public static byte[] toBytes() throws IOException{
//获取一个user的构造器
Builder builder =PlayerModule.user.newBuidler();
//设置数据
builder.setId(10).setAge(18).setName("luo").addSkills(1001);
//构造对象
User user =builder.build();
//序列化成字节数组
byte[] byteArray= user.toByteArray();
return byteArray;
}
反序列化
public static void toPlayer(byte[] bs) throws Exception{
ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(bs));
User player = (User)inputStream.readObject();
//打印
System.out.println("Id:" + player.getPlayerId());
System.out.println("age:" + player.getAge());
System.out.println("name:" + player.getName());
System.out.println("skills:" + (Arrays.toString(player.getSkills().toArray())));
}
还没有评论,来说两句吧...