Redis序列化及反序列化应用

3 篇文章 0 订阅

Redis序列化及反序列化

需要引入的jar包:

protostuff-api-1.1.3.jar

protostuff-collectionschema-1.1.3.jar

protostuff-core-1.1.3.jar

protostuff-runtime-1.1.3.jar

1、java对象序列化工具

import java.io.Serializable;

/** 
 * [概 要] java对象序列化工具
 * [环 境] J2SE 1.7 
 * @version 1.0 
 */  
public class VO<T> implements Serializable {  
    private T value;  
    public VO(T value) {  
        this.value = value;  
    }  
    public VO() {  
    }  
    public T getValue() {  
        return value;  
    }  
    @Override  
    public String toString() {  
        return "VO{" +  
                "value=" + value +  
                '}';  
    }  
}  

2、protostuff对象序列化工具

import java.util.concurrent.ConcurrentHashMap;  
import com.dyuproject.protostuff.LinkedBuffer;  
import com.dyuproject.protostuff.ProtostuffIOUtil;  
import com.dyuproject.protostuff.Schema;  
import com.dyuproject.protostuff.runtime.RuntimeSchema;  
  
/** 
 * [概 要] protostuff对象序列化工具
 * [环 境] J2SE 1.7 
 * @version 1.0 
 */  
public class ProtostuffSerializer {  
    private static ConcurrentHashMap<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>();  
    public <T> byte[] serialize(final T source) {  
        VO<T> vo = new VO<T>(source);  
        final LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);  
        try {  
            final Schema<VO> schema = getSchema(VO.class);  
            return serializeInternal(vo, schema, buffer);  
        } catch (final Exception e) {  
            throw new IllegalStateException(e.getMessage(), e);  
        } finally {  
            buffer.clear();  
        }  
    }  
    public <T> T deserialize(final byte[] bytes) {  
        try {  
            Schema<VO> schema = getSchema(VO.class);
            VO vo = deserializeInternal(bytes, schema.newMessage(), schema);  
            if (vo != null && vo.getValue() != null) {  
                return (T) vo.getValue();  
            }  
        } catch (final Exception e) {  
            throw new IllegalStateException(e.getMessage(), e);  
        }  
        return null;  
    }  
    private <T> byte[] serializeInternal(final T source, final Schema<T> schema, final LinkedBuffer buffer) {  
        return ProtostuffIOUtil.toByteArray(source, schema, buffer);  
    }  
    private <T> T deserializeInternal(final byte[] bytes, final T result, final Schema<T> schema) {  
        ProtostuffIOUtil.mergeFrom(bytes, result, schema);  
        return result;  
    }  
    private static <T> Schema<T> getSchema(Class<T> clazz) {  
        @SuppressWarnings("unchecked")  
        Schema<T> schema = (Schema<T>) cachedSchema.get(clazz);  
        if (schema == null) {  
            schema = RuntimeSchema.createFrom(clazz);  
            cachedSchema.put(clazz, schema);  
        }  
        return schema;  
    }  
}  

3、序列化及反序列化调用

public class UnOrSerialize {

	/** 
     *  
     * [概 要] 序列化对象 
     *  
     * @param object 要序列化的对象 
     * @return byte[] 对象序列化后的字节信息 
     */  
	public static  byte[] serialize(Object object) {
        ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer();  
        byte[] result = protostuffSerializer.serialize(object);  
          
        return result;  
    }  
      
    /** 
     *  
     * [概 要] 反序列化 
     * @param bytes 对象的字节信息 
     * @return Object 反序列化的对象 
     */  
    public static Object unserialize(byte[] bytes) {  
          
        ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer();  
        Object object=protostuffSerializer.deserialize(bytes);  
          
        return object;  
    }  
}

注:本文借助网络资源整理,只用于个人学习,如有侵权,请联系博主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵叻嗰咪

如果有用,请作者喝杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值