ProtostuffUtil—快速序列化和反序列化对象工具

来源:互联网 发布:示剑网络马大伟 编辑:程序博客网 时间:2024/06/05 19:47
package cn.btkj.utils;import java.util.ArrayList;import java.util.List; import com.dyuproject.protostuff.LinkedBuffer;import com.dyuproject.protostuff.ProtostuffIOUtil;import com.dyuproject.protostuff.Schema;import com.dyuproject.protostuff.runtime.RuntimeSchema;/* 项目中http通信离不开对象的序列化和反序列化,以前框架使用的是xml,通用、可读性强,对于对速度要求不高的系统来说,的确是一种不错的选择。然而最近的一个需求需要使用protobuf,因为其速度比xml快非常多,而业界说到java的序列化和反序列化,更离不开基于protobuf的protostuff*/public class ProtostuffUtil {        public static List<byte[]> serializeProtoStuffObjectList(List list,Class clazz) {        if(list == null  ||  list.size() <= 0) {            return null;        }         long start = System.currentTimeMillis() ;        List<byte[]> bytes = new ArrayList<byte[]>();        Schema  schema = RuntimeSchema.getSchema(clazz);        LinkedBuffer buffer = LinkedBuffer.allocate(4096);        byte[] protostuff = null;        for(Object p : list) {            try {                protostuff = ProtostuffIOUtil.toByteArray(p, schema, buffer);                bytes.add(protostuff);            } finally {                buffer.clear();            }        }        long end = System.currentTimeMillis() ;        System.out.println("usetime is"+(end - start));        return bytes;    }         public static List  deserializeProtoStuffDataListToObjectList(                List<byte[]> bytesList,Class clazz) {            if(bytesList == null || bytesList.size() <= 0) {                return null;            }            long start = System.currentTimeMillis() ;            Schema  schema = RuntimeSchema.getSchema(clazz);            List<Object> list = new ArrayList<Object>();            for(byte[] bs : bytesList) {                Object obj = null;                try {                    obj = clazz.newInstance();                } catch (InstantiationException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IllegalAccessException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                ProtostuffIOUtil.mergeFrom(bs,obj, schema);                list.add(obj);            }            long end = System.currentTimeMillis() ;            System.out.println("usetime is"+(end - start));            return list;        }                public static  byte[]  serializeProtoStuffObject(Object obj,Class clazz) {            if(obj == null) {                return null;            }            long start = System.currentTimeMillis() ;            Schema  schema = RuntimeSchema.getSchema(clazz);            LinkedBuffer buffer = LinkedBuffer.allocate(4096);            byte[] protostuff = null;            protostuff = ProtostuffIOUtil.toByteArray(obj, schema, buffer);            long end = System.currentTimeMillis() ;            System.out.println("usetime is"+(end - start));            return protostuff;        }                         public static Object  deserializeProtoStuffDataListToProductsObject(                     byte[]  bytes,Class clazz) {             if(bytes == null) {                    return null;                }                long start = System.currentTimeMillis() ;                Schema  schema = RuntimeSchema.getSchema(clazz);                    Object obj = null;                try {                    obj = clazz.newInstance();                } catch (InstantiationException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IllegalAccessException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                            ProtostuffIOUtil.mergeFrom(bytes,obj, schema);                long end = System.currentTimeMillis() ;                System.out.println("usetime is"+(end - start));                return obj;            }}

 


用到的maven依赖:

        <dependency>
            <groupId>com.dyuproject.protostuff</groupId>
            <artifactId>protostuff-core</artifactId>
            <version>1.0.8</version>
        </dependency>
        <dependency>
            <groupId>com.dyuproject.protostuff</groupId>
            <artifactId>protostuff-runtime</artifactId>
            <version>1.0.8</version>
        </dependency>


0 0