0

我使用KRYO串行序列化我的Java对象使用KRYO非序列化到序列化类属性

我的Java对象是这样的

Class A { 

private Class B; 
private Class C; 
private Class D; 
int x ; 
int y; 
} 

B,C和d是第三方库,而不是可串行化。另外我不能编辑他们的代码。

我使用这样的Kryo来序列化 A a = new A(); //填充A 的属性Kryo kryo = new Kryo(); 输出输出=新输出(新FileOutputStream(“file.bin”)); kryo.writeClassAndObject(output,A); output.close();

和反序列化

input = new com.esotericsoftware.kryo.io.Input(new FileInputStream("file.bin")); 
     InputQueueManagerImpl inputQueue = (A) kryo.readClassAndObject(input);//, A.class); 
     input.close(); 

在执行时,我得到ConcurrentModificationException的

at apache.Application.main(Application.java:43) 
Caused by: com.esotericsoftware.kryo.KryoException: java.util.ConcurrentModificationException 
Serialization trace: 
classes (sun.misc.Launcher$AppClassLoader) 
contextClassLoader (java.lang.Thread) 
threads (java.lang.ThreadGroup) 
parent (java.lang.ThreadGroup) 
group (java.util.concurrent.Executors$DefaultThreadFactory) 
threadFactory (java.util.concurrent.ThreadPoolExecutor) 
executor (com.rabbitmq.client.impl.ConsumerWorkService) 
workService (com.rabbitmq.client.impl.ConsumerDispatcher) 
dispatcher (com.rabbitmq.client.impl.ChannelN) 
_channelMap (com.rabbitmq.client.impl.ChannelManager) 
_channelManager (com.rabbitmq.client.impl.AMQConnection) 
delegate (org.springframework.amqp.rabbit.connection.SimpleConnection) 
target  (org.springframework.amqp.rabbit.connection.CachingConnectionFactory$ChannelCachingConnectionProxy) 
checkoutPermits (org.springframework.amqp.rabbit.connection.CachingConnectionFactory) 
connectionFactory (org.springframework.amqp.rabbit.core.RabbitAdmin) 
amqpAdmin (mqclient.rabbitmq.manager.impl.InputQueueManagerImpl) 
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:585) 
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) 

当我做B,C,d瞬态它工作正常。但我想序列化B,C,D。

kryo能帮忙吗?如果是,那么执行该操作的正确方法是什么?

回答

0

这意味着,虽然kryo正在序列化你的类和它的所有成员类(B,C,...),但是从另一个线程的整个层次结构中修改了某些东西。例如,假设B类包含一个List列表。当你正在序列化你的类A时,这个列表中的东西正在变化 - >然后你会得到上面的异常。这就是kryo的设计。

相关问题