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