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);
                    }
                }
            }
        }
    }
  • 相关阅读:
    js和css
    主题
    php.ini
    css 选择器、元素默认宽度、media screen
    linux 重要笔记
    cookie和session、
    tp5 报 A non well formed numeric value encountered 的错解决办法
    pdo
    二叉树
    顺序串
  • 原文地址:https://www.cnblogs.com/chappell/p/9050036.html
Copyright © 2011-2022 走看看