`
1028826685
  • 浏览: 920152 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

Protostuff对象序列化工具

    博客分类:
  • J2EE
 
阅读更多

VO.java

import java.io.Serializable;

/**
 * [概 要] java对象序列化工具<br/>
 * [环 境] J2SE 1.7
 * @author 研发部-ly
 * @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 +
                '}';
    }
}

 

 

ProtostuffSerializer.java

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对象序列化工具<br/>
 * [环 境] J2SE 1.7
 * @author 研发部-ly
 * @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;
    }
}

 

 

测试:

 

/**
     * 
     * [概 要] 序列化对象
     * 
     * @param object 要序列化的对象
     * @return byte[] 对象序列化后的字节信息
     */
    private 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;
    }

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics