Tengo dos listas (lista1 y lista2) que contienen referencias a algunos objetos, donde algunas de las entradas de la lista pueden apuntar al mismo objeto. Luego, por varias razones, estoy serializando estas listas en dos archivos separados. Finalmente, cuando deserializo las listas, me gustaría asegurarme de que no estoy recreando más objetos de los necesarios. En otras palabras, aún debe ser posible que alguna entrada de la Lista1 apunte al mismo objeto que alguna entrada en la Lista2.Evitar objetos duplicados en la deserialización de Java
MyObject obj = new MyObject();
List<MyObject> list1 = new ArrayList<MyObject>();
List<MyObject> list2 = new ArrayList<MyObject>();
list1.add(obj);
list2.add(obj);
// serialize to file1.ser
ObjectOutputStream oos = new ObjectOutputStream(...);
oos.writeObject(list1);
oos.close();
// serialize to file2.ser
oos = new ObjectOutputStream(...);
oos.writeObject(list2);
oos.close();
creo que las secciones 3.4 y A.2 del spec dicen que deserialización estrictamente da lugar a la creación de nuevos objetos, pero no estoy seguro. Si es así, algunas soluciones posibles pueden implicar:
- Implementando equals() y hashCode() y comprobando las referencias manualmente.
- Creando una "clase de contenedor" para contener todo y luego serializar la clase de contenedor.
¿Hay una manera fácil de garantizar que los objetos no se duplican en la deserialización?
Gracias.
No creo que esto sea posible. Para que los objetos se compartan entre las secuencias, siempre debe leer/escribir ambas secuencias juntas. Pero si debe hacer eso, ¿por qué no combinarlos en una secuencia? – finnw