Netty序列化协议Protocol buff

野性酷女 2021-12-14 21:19 392阅读 0赞

序列化协议

序列化和反序列化
把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。用途:文件的copy、网络数据的传输

Protocol buff(代替JSON)
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
相比较Java自带的序列化方式:更加高效,但是客户端和服务器端都需要使用配置文件。它对字节具有伸缩性,避免了Java数据类型固定大小而造成空间的浪费。

Protocol buff的使用

  1. //定义class user的Protocol buff的文件
  2. //定义包名
  3. option java_package = "com.proto";
  4. //一个模块下可以生成多个类,方便管理
  5. option java_outer_classname="userModule";
  6. message user
  7. {
  8. //参数需要定义一个默认值 每个参数都不能一样
  9. required int64 Id=1; //int64 对应Java的 Long
  10. required int32 age=2; //int32 对应Java的 Int
  11. required string name=3; //string 对应Java的String
  12. repeated int32 skills=4; //这里repeated对应Java的List
  13. }
  14. message MoreDetails
  15. {
  16. required string sex=1;
  17. }

使用批处理的方式利用 .proto文件生成 class文件(要带有protoc.exe文件)
新建build.bat文件

  1. protoc ./*.proto --java_out=./
  2. pasue

序列化

  1. public static byte[] toBytes() throws IOException{
  2. //获取一个user的构造器
  3. Builder builder =PlayerModule.user.newBuidler();
  4. //设置数据
  5. builder.setId(10).setAge(18).setName("luo").addSkills(1001);
  6. //构造对象
  7. User user =builder.build();
  8. //序列化成字节数组
  9. byte[] byteArray= user.toByteArray();
  10. return byteArray;
  11. }

反序列化

  1. public static void toPlayer(byte[] bs) throws Exception{
  2. ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(bs));
  3. User player = (User)inputStream.readObject();
  4. //打印
  5. System.out.println("Id:" + player.getPlayerId());
  6. System.out.println("age:" + player.getAge());
  7. System.out.println("name:" + player.getName());
  8. System.out.println("skills:" + (Arrays.toString(player.getSkills().toArray())));
  9. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,392人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Netty学习07--Protocol Buff

    1.protocol buff是一种协议,是谷歌推出的一种序列化协议 2.Java序列化协议也是一种协议 3.两者的目的是,将对象序列化成字节数组,或者说是二进制数据  

    相关 Netty序列协议Protocol buff

    序列化协议 序列化和反序列化 把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。用途:文件的copy、网络数据的传输 Pro