性能最好的序列化反序列化,Protobuf的用法(maven项目)

来源:互联网 发布:win10查看图片软件 编辑:程序博客网 时间:2024/05/29 08:58

首先要在pom.xml里添加Protobuf的jar包

<dependency>       <groupId>com.dyuproject.protostuff</groupId>       <artifactId>protostuff-core</artifactId>       <version>1.0.8</version>   </dependency>     <dependency>       <groupId>com.dyuproject.protostuff</groupId>       <artifactId>protostuff-runtime</artifactId>       <version>1.0.8</version>   </dependency>  

序列化的实体类User.Java(不需要实现Serializable接口)

package com.serialize.entity;    public class User {      private String id;      private String username;      private String password;            public User() {      }      public User(String id, String username, String password) {          this.id = id;          this.username = username;          this.password = password;      }      public String getId() {          return id;      }      public void setId(String id) {          this.id = id;      }      public String getUsername() {          return username;      }      public void setUsername(String username) {          this.username = username;      }      public String getPassword() {          return password;      }      public void setPassword(String password) {          this.password = password;      }      @Override      public String toString() {          return "User [id=" + id + ", username=" + username + ", password="                  + password + "]";      }          }  

序列化的工具类SerializeUtils.java(使用了泛型方法)

package com.serialize.utils;    import com.dyuproject.protostuff.LinkedBuffer;  import com.dyuproject.protostuff.ProtobufIOUtil;  import com.dyuproject.protostuff.runtime.RuntimeSchema;    public class SerializeUtils{      public static <T> byte[] serialize(T t,Class<T> clazz) {          return ProtobufIOUtil.toByteArray(t, RuntimeSchema.createFrom(clazz),                  LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));      }      public static <T> T deSerialize(byte[] data,Class<T> clazz) {          RuntimeSchema<T> runtimeSchema = RuntimeSchema.createFrom(clazz);          T t = runtimeSchema.newMessage();          ProtobufIOUtil.mergeFrom(data, t, runtimeSchema);          return t;      }  }  

测试主类App.java

package com.serialize;    import com.serialize.entity.User;  import com.serialize.utils.SerializeUtils;    public class App {      public static void main(String[] args) {              User user=new User("1","xiaobao","123456");          System.out.println("序列化");          byte[] data = SerializeUtils.serialize(user,User.class);          for (byte b : data) {              System.out.print(b);          }          System.out.println();          System.out.println("反序列化");          User user2 = SerializeUtils.deSerialize(data,User.class);          System.out.println(user2);      }  }  



2 0