2009-03-31 22 views

Respuesta

19

Hay una bonita descripción en la última sección de de Josh Bloch Effective Java, Second Edition.

Supongamos que tiene una clase A que le gustaría hacer serializable. Primero declara que implementa Serializable. A continuación, utilice el método de serialización writeReplace() para devolver un denominado "proxy de serialización" que se serializará en lugar de la instancia de A. El método writeReplace() no necesita ser público. La serialización predeterminada en A nunca se invoca, por lo que se pueden mantener todas las propiedades de API de A.

Normalmente, el proxy se implementa como una clase anidada estática privada que a su vez debe implementar Serializable (o Externalizable para un control completo del proceso de lectura/escritura). Como el proxy es privado, sus detalles de implementación, como tener un constructor sin argumentos y ser mutable, estarán ocultos.

El proxy almacena suficiente del estado del objeto original para escribir, por lo que puede reconstituir el objeto en deserialización. En la deserialización, el proxy utiliza el método readResolve() para devolver una instancia de A. Para singletons, esta puede ser la instancia singleton en sí misma.

Escribí una entrada de blog detallada con ejemplos, Serializing Immutables and Singletons with a Serialization Proxy.

+0

Me preguntaba si el proxy de serialización podría ser Externalizable. El libro solo menciona Serializable. ¡Gracias! –

Cuestiones relacionadas