编、解码器
kryo
“Kryo 一般只用来进行序列化(然后作为缓存,或者落地到存储设备之中)、反序列化,而不用于在多个系统、甚至多种语言间进行数据交换 —— 目前 kryo 也只有 java 实现。”
Reading and writing(读与写)
Kryo有三组读写对象的方法。
// 1. 如果不知道对象的具体类,且对象可以为null:
kryo.writeClassAndObject(output, object);
// ...
Object object = kryo.readClassAndObject(input);
if (object instanceof SomeClass) {
// ...
}
// 2. 如果类已知且对象可以为null:
kryo.writeObjectOrNull(output, someObject);
// ...
SomeClass someObject = kryo.readObjectOrNull(input, SomeClass.class);
// 3. 如果类已知且对象不能为null:
kryo.writeObject(output, someObject);
// ...
SomeClass someObject = kryo.readObject(input, SomeClass.class);
实现代码:
public class KryoSerializer implements Serializer {
// kryo不是线程安全的,所以需要使用 ThreadLocal 在指定线程内存储数据
private final ThreadLocal<Kryo> kryoThreadLocal = ThreadLocal.withInitial(() -> {
Kryo kryo