java无法在Kryo反序列化期间加载类异常
我正在使用Kryo进行序列化/反序列化,并且没有事先注册类(我正在进行这方面的工作)。也就是说,在反序列化时,我得到了一个例外:
无法加载类shell。应用程序编程接口。模型用kryo的类加载器的Batterystato。正在使用当前
现在,我的类名实际上是shell。应用程序编程接口。模型BatteryStatus所以我不确定序列化期间发生了什么
类名的长度有限制吗
另外,当我序列化具有嵌套结构并且可能具有循环引用的JPA实体时,这会引起潜在的问题吗?如果是这样,我想我会看到堆栈溢出异常
这是序列化对象的一个片段:
protected final Kryo kryo = new Kryo();
try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
try (final Output output = new Output(baos)) {
kryo.writeObject(output, data);
}
return (baos.toByteArray());
} catch (IOException e) {
LOGGER.error("error serializing", e);
throw (new RuntimeException("Error serializing", e));
}
反序列化:
try (final Input input = new Input(inputStream)) {
return ((Serializable) kryo.readObject(input, entityType));
}
entityType是父类,在本例中: 壳应用程序编程接口。模型心跳
在Heartbeat内部有几个实体,其中一个是BatteryStatus
# 1 楼答案
Kryo可以处理复杂嵌套对象和循环引用的序列化和反序列化。这也是为什么这么多人喜欢Kryo的部分原因
由于要发送的对象可能是多种可能类型之一,因此应使用
writeClassAndObject
和readClassAndObject
方法及
Docs here