Kryo基本使用

import org.junit.Test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Base64;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.esotericsoftware.kryo.serializers.JavaSerializer;

/**
 * Kryo序列化与反序列化操作
 * <dependency>
 *         <groupId>com.esotericsoftware</groupId>
 *        <artifactId>kryo-shaded</artifactId>
 *        <version>4.0.0</version>
 * </dependency>
 * 
 * @author Hxm
 *
 */
@SuppressWarnings({"all"})
public class KryoTest {
    
    /**
     * 序列化
     * @param obj    待序列化对象
     * @return        base64字符串
     */
    private <T extends Serializable> String serializationObject(T obj) {
        Kryo kryo = new Kryo();
        kryo.setReferences(false);
        kryo.register(obj.getClass(), new JavaSerializer());

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Output output = new Output(baos);
        kryo.writeClassAndObject(output, obj);
        output.flush();
        output.close();

        byte[] b = baos.toByteArray();
        try {
            baos.flush();
            baos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return Base64.getEncoder().encodeToString(b);
    }
    /**
     * 反序列化
     * @param objStr    进行反序列化的base64字符串    
     * @param clazz        反序列化目标类型
     * @return            对象
     */
    private <T extends Serializable> T deserializationObject(String objStr, Class<T> clazz) {
        Kryo kryo = new Kryo();
        kryo.setReferences(false);
        kryo.register(clazz, new JavaSerializer());
        ByteArrayInputStream bais = new ByteArrayInputStream(Base64.getDecoder().decode(objStr));
        Input input = new Input(bais);
        return (T) kryo.readClassAndObject(input);
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容