Protostuff序列化

 1         <!--protostuff序列化依賴-->
 2         <dependency>
 3             <groupId>com.dyuproject.protostuff</groupId>
 4             <artifactId>protostuff-core</artifactId>
 5             <version>1.1.2</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>com.dyuproject.protostuff</groupId>
 9             <artifactId>protostuff-runtime</artifactId>
10             <version>1.1.2</version>
11         </dependency>
package com.jyhd.cardhouse.redis.utile;import com.dyuproject.protostuff.LinkedBuffer;import com.dyuproject.protostuff.ProtostuffIOUtil;import com.dyuproject.protostuff.Schema;import com.dyuproject.protostuff.runtime.RuntimeSchema;import org.springframework.objenesis.Objenesis;import org.springframework.objenesis.ObjenesisStd;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * 序列化工具 * Create by Administrator * 2018/3/19 0019 * 下午 2:28 **/public class serializeUtile {    private static Map<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<>();    private static Objenesis objenesis = new ObjenesisStd(true);    /**     * 序列化     * @param obj     * @param <T>     * @return     */    @SuppressWarnings("unchecked") //用於抑制編譯器產生警告信息。    public static <T> byte[] serialize(T obj){        Class<T> cls = (Class<T>) obj.getClass();        LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);        try {            Schema<T> schema = getSchema(cls);            return ProtostuffIOUtil.toByteArray(obj, schema, buffer);        } catch (Exception e) {            throw new IllegalStateException(e.getMessage(), e);        } finally {            buffer.clear();        }    }    /**     * 反序列化     * @param data     * @param cls     * @param <T>     * @return     */    public static <T> T unserialize(byte[] data, Class<T> cls) {        try {            T message = objenesis.newInstance(cls);            Schema<T> schema = getSchema(cls);            ProtostuffIOUtil.mergeFrom(data, message, schema);            return message;        } catch (Exception e) {            throw new IllegalStateException(e.getMessage(), e);        }    }    @SuppressWarnings("unchecked")    private static <T> Schema<T> getSchema(Class<T> cls) {        Schema<T> schema = (Schema<T>) cachedSchema.get(cls);        if (schema == null) {            schema = RuntimeSchema.createFrom(cls);            if (schema != null) {                cachedSchema.put(cls, schema);            }        }        return schema;    }}
相關文章
相關標籤/搜索