泛型学习目录:
2. protostuff的准备工作
Java有一个序列化的技术,就是把Object转换为可保存,可传输的流数据。
而Protostuff就是一个优秀的序列化框架。
1. 首先引入MAVEN依赖:
io.protostuff
protostuff-runtime
io.protostuff
protostuff-core
2. protostuff序列化和反序列化的问题:
使用protostuff的时候会遇到一些无法序列化/反序列化的对象,比如Map,List等。
所以我们可以引入一个包装类来把数据包装下。
3. 代码分析
我们引入静态内部类,因为该类只是为protostuff序列化进行服务的,故使用静态内部类。
我们最好是在声明SerializeDeserializeWrapper时,保存T的引用,以便后续逻辑中保存包装的类型
//静态内部类
public static class SerializeDeserializeWrapper {
//泛型的使用
private T data;
//建造者模式(返回实体类型)
public static SerializeDeserializeWrapper builder(T data) {
SerializeDeserializeWrapper wrapper = new SerializeDeserializeWrapper();
wrapper.setData(data);
return wrapper;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
3.1 不使用泛型&&使用泛型
1.1 反序列化不使用泛型:
public static Object deserialize(byte[] data, Class clazz) {
try {
//判断是否是不可序列化对象,若是不能序列化对象,将对象进行包装
if (WRAPPER_SET.contains(clazz)) {
//SerializeDeserializeWrapper wrapper = SerializeDeserializeWrapper.builder(clazz.newInstance());
SerializeDeserializeWrapper wrapper = new SerializeDeserializeWrapper();
ProtostuffIOUtil.mergeFrom(data, wrapper, WRAPPER_SCHEMA);
return wrapper.getData();
} else {
Object message = clazz.newInstance();