zoukankan      html  css  js  c++  java
  • 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;
    }

    }

      

  • 相关阅读:
    iOS学习之MVC,MVVM,MVP模式优缺点
    iOS学习之单例模式
    iOS学习之观察者模式
    iOS学习之设计模式
    iOS学习之SKTagView的使用
    iOS学习之cocoaPods
    iOS学习之git的使用
    iOS学习之block
    [学习笔记]一个实例理解Lingo的灵敏性分析
    爬虫实例(二)——爬取某宝评论
  • 原文地址:https://www.cnblogs.com/chancy/p/8601909.html
Copyright © 2011-2022 走看看