JAVA序列化 框架 Kryo

文章链接:http://zkread.com/article/1123137.html


Kryo是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的API。无论文件、数据库或网络数据Kryo都可以随时完成序列化。Kryo还可以执行自动深拷贝(克隆)、浅拷贝(克隆)。这是对象到对象的直接拷贝,非对象->字节->对象的拷贝。性能较其它有一定的优质。具体参数可参考引用的第三篇文章。

maven中 通过如下 ,最新版为 4.0.

<!-- https://mvnrepository.com/artifact/com.esotericsoftware/kryo -->
<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>4.0.0</version>
</dependency>

示例 

1)文件流序列化对象

Kryo kryo = new Kryo();
// ...
Output output = new Output(new FileOutputStream("file.bin"));
SomeClass someObject = ...
kryo.writeObject(output, someObject);
output.close();
// ...
Input input = new Input(new FileInputStream("file.bin"));
SomeClass someObject = kryo.readObject(input, SomeClass.class);
input.close();

2) 字节序列化对象

	public byte[] Serialize(Object object) {
		Output output = null; 
		output = new Output(1, 4096); //1 表示后台字节数组的初始大小,4096表示数组可扩容的最大值。
		kryo.writeObject(output, object); 
		byte[] bb = output.toBytes(); 
		output.flush(); 
		return bb;
	}

	public <t> t Deserialize(byte[] bb) {
		Input input = null; 		
		input = new Input(bb); 
		t res = (t) kryo.readObject(input, TestClass.class);
		input.close();
		return res;
	}

3) 类和对象的序列化

    static {
        kryo.setRegistrationRequired(false);
        kryo.setMaxDepth(20);
    }
 
    public static byte[] serialize(Object obj) {
        ByteArrayOutputStream out = null;
        Output output = null;
        try {
            out = new ByteArrayOutputStream();
            output = new Output(out, 1024);
            kryo.writeClassAndObject(output, obj);
            return output.toBytes();
        } catch (Exception e) {
            throw new CacheException(e);
        } finally {
            if (null != out) {
                try {
                    out.close();
                    out = null;
                } catch (IOException e) {
                }
            }
            if (null != output) {
                output.close();
                output = null;
            }
        }
    }
 
    public static Object deserialize(byte[] bytes) {
        Input input = null;
        try {
            input = new Input(bytes, 0, 1024);
            return kryo.readClassAndObject(input);
        } catch (Exception e) {
            throw new CacheException(e);
        } finally {
            if (null != input) {
                input.close();
                input = null;
            }
        }
    }

相关链接:http://kavy.iteye.com/blog/2169490

kryo 的git链接:https://github.com/EsotericSoftware/kryo

http://www.codetopia.cn/2016/05/12/serialization-java-vs-kryo/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值