kryo 序列化

package com.#.vde.compiler.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.esotericsoftware.kryo.serializers.CollectionSerializer;
import com.esotericsoftware.kryo.serializers.JavaSerializer;
import com.telenav.vde.compiler.feature.CityFeature;

public class KryoHelper {

    public static <T> Kryo getKryo(Class<T> clazz) {
        Kryo kryo = new Kryo();
        kryo.setReferences(false);
        kryo.setRegistrationRequired(true);

        CollectionSerializer serializer = new CollectionSerializer();
        serializer.setElementClass(clazz, new JavaSerializer());
        serializer.setElementsCanBeNull(false);

        kryo.register(clazz, new JavaSerializer());
        kryo.register(ArrayList.class, serializer);

        return kryo;
    }

    /**
     * Serialization object to file through kryo
     * 
     * @param <T>
     * 
     * @param <T>
     * 
     * @param citylist
     * @param filename
     */
    public static <T extends Serializable> void setSerializationObjectByKryo(List<T> citylist, Class<T> clazz,
            String filename) {
        Date time0 = new Date();

        try {
            Kryo kryo = getKryo(clazz);

            Output output = new Output(new FileOutputStream(filename));
            kryo.writeObject(output, citylist);

            System.out.println("write done " + filename);
            System.out.println("time cost/ms : " + ((new Date()).getTime() - time0.getTime()));

            output.flush();
            output.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.exit(-1);
        }
    }

    /**
     * get the serialization object
     * 
     * @param <T>
     * 
     * @param cla
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T extends Serializable> List<T> getSerializationObjectByKryo(String filename, Class<T> clazz) {
        Date time0 = new Date();

        Kryo kryo = getKryo(clazz);

        Input input;
        try {
            input = new Input(new FileInputStream(filename));

            List<T> citylist = kryo.readObject(input, ArrayList.class);

            input.close();

            System.out.println("read done");
            System.out.println("time cost " + ((new Date()).getTime() - time0.getTime()));
            return citylist;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 

转载于:https://www.cnblogs.com/dasheng-maritime/p/7553233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值