Kryo官方文档学习笔记
Posted 儒雅随和狗粉丝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kryo官方文档学习笔记相关的知识,希望对你有一定的参考价值。
一.官方文档
Kryo目前更新到5.0版本: https://github.com/EsotericSoftware/kryo
4.0版本和5.0版本的文档差距比较大,5.0要讲解的详细很多,建议还是看5.0
二.学习笔记
1.Round trip
这段代码的意思是没有经过流进行传输序列化后的对象,而是将序列化后的字节直接存储在buffer字节数组中,也就是序列化到字节并返回到对象
Kryo kryo = new Kryo();
// Register all classes to be serialized.
kryo.register(SomeClass.class);
SomeClass object1 = new SomeClass();
Output output = new Output(1024, -1);
kryo.writeObject(output, object1);
Input input = new Input(output.getBuffer(), 0, output.position());
SomeClass object2 = kryo.readObject(input, SomeClass.class);
// output.getBuffer()直接在buffer数组里取出字节序列
源码:
public Output(int bufferSize, int maxBufferSize) {
this.varEncoding = true;
if (bufferSize > maxBufferSize && maxBufferSize != -1) {
throw new IllegalArgumentException("bufferSize: " + bufferSize + " cannot be greater than maxBufferSize: " + maxBufferSize);
} else if (maxBufferSize < -1) {
throw new IllegalArgumentException("maxBufferSize cannot be < -1: " + maxBufferSize);
} else {
this.capacity = bufferSize;
this.maxCapacity = maxBufferSize == -1 ? 2147483639 : maxBufferSize;
this.buffer = new byte[bufferSize]; // 存储在buffer不经过流
}
}
2.Deep and shallow copies
用来代替上面的Round trip
即:Kryo 支持使用从一个对象到另一个对象的直接赋值来制作对象的深拷贝和浅拷贝。这比序列化为字节并返回对象更有效
Kryo kryo = new Kryo();
SomeClass object = ...
SomeClass copy1 = kryo.copy(object);
SomeClass copy2 = kryo.copyShallow(object);
3.补充的一些知识
以上是关于Kryo官方文档学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍