0

Я использую Kryo Serializer для сериализации мой Java ObjectИспользование Kryo для сериализации классов с Non Serializable Атрибуты

Мой объект Java, как это

Class A { 

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

B, C и D являются сторонние библиотеки и не сериализуемый. Также я не могу отредактировать их код.

Я использую Kryo, как это, для сериализации A a = новый A(); // заселяющие свойства объекта A Kryo kryo = new Kryo(); Выходной выход = новый Выход (новый FileOutputStream ("file.bin")); kryo.writeClassAndObject (выход, 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.

Может ли помощь крио здесь? Если да, каков правильный способ сделать это?

ответ

0

Это означает, что в то время как kryo сериализует ваш класс и все его классы-члены (B, C, ...), что-то изменилось в целую иерархию из другого потока. Например, скажем, что класс B содержит список List. И что-то меняется в этом списке, когда вы сериализуете свой класс A ->, тогда вы получите выше исключения. Так спроектировано крио.

 Смежные вопросы

  • Нет связанных вопросов^_^