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

来源:互联网 发布:医院信息管理系统源码 编辑:程序博客网 时间:2024/05/15 01:32

首先要在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;}@Overridepublic 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);}}

0 0