zoukankan      html  css  js  c++  java
  • 序列化与反序列化之Kryo

    序列化:把对象转换为字节序列的过程称为对象的序列化。
    反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

    需要序列化的情况:

    当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
    当你想用套接字在网络上传送对象的时候;
    当你想通过RMI传输对象的时候;

    Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。

    序列化工具类

    package com.ai.toptea.itsm.imp.util;
    
    import org.apache.commons.pool2.ObjectPool;
    import org.apache.commons.pool2.impl.GenericObjectPool;
    
    import com.ai.toptea.common.log.TopteaLogger;
    import com.esotericsoftware.kryo.Kryo;
    import com.esotericsoftware.kryo.io.Input;
    import com.esotericsoftware.kryo.io.Output;
    
    public class SerializeUtil {
        
        private static TopteaLogger logger = TopteaLogger.getLogger(SerializeUtil.class);
    
        public static final int BUFFER_SIZE = 2048;
        public static final int MAX_BUFFER_SIZE = 10485760;
        
        private  static ObjectPool<Kryo> kryo_pool;
        
        static{
            kryo_pool = new GenericObjectPool<Kryo>(new KryoFactory());
        }
        
        public static byte[] serialize(Object t) throws Exception{
            Kryo kryo = null;
            Output output = null;
            try{
                kryo = kryo_pool.borrowObject();
                output = new Output(BUFFER_SIZE, MAX_BUFFER_SIZE);
                kryo.writeClassAndObject(output, t);
                return output.toBytes();
                
            }catch(Exception e){
                logger.error("异常", e);
                throw e;
            }finally{
                if(output != null){
                    try {
                        output.close();
                        output = null;
                    } catch (Exception e) {
                        logger.error("异常", e);
                    }
                }
                if(kryo != null){
                    try {
                        kryo_pool.returnObject(kryo);
                    } catch (Exception e) {
                        logger.error("异常", e);
                    }
                }
            }
        }
        
        public static Object deserialize(byte[] bytes) throws Exception{
            Kryo kryo = null;
            Input input = null;
            try{
                kryo = kryo_pool.borrowObject();
                input = new Input(bytes);
                Object t = kryo.readClassAndObject(input);
                return t;
            }catch(Exception e){
                logger.error("异常", e);
                throw e;
            }finally{
                if(input != null){
                    try {
                        input.close();
                        input = null;
                    } catch (Exception e) {
                        logger.error("异常", e);
                    }
                }
                if(kryo != null){
                    try {
                        kryo_pool.returnObject(kryo);
                    } catch (Exception e) {
                        logger.error("异常", e);
                    }
                }
            }
        }
    }
  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/chappell/p/9050036.html
Copyright © 2011-2022 走看看