"¡Hola, Amigo! Me gustaría agregar un poco a lo que Ellie te dijo".

A veces es necesario controlar el proceso de serialización. Estas son algunas de las razones por las que:

1) Un objeto no está listo para la serialización : su estado interno actual está en proceso de cambio.

2) Un objeto contiene objetos no serializables, pero puede convertirlos en una forma que pueda serializarse fácilmente , por ejemplo, guardarlos como una matriz de bytes o algo más.

3) Un objeto quiere deserializar todos sus datos como una unidad y/o cifrarlos antes de la serialización.

Existen muchas razones por las que es posible que desee realizar la serialización manualmente. Pero no queremos perder todas las ventajas que ofrece la serialización estándar. Después de todo, nuestro objeto podría usar otros objetos. Pero no se pueden serializar si nuestro objeto no admite la serialización.

Esta situación también tiene solución: la interfaz Externalizable . Debemos agradecer a los creadores visionarios de Java. Simplemente reemplace la interfaz Serializable con la interfaz Externalizable , y su clase podrá administrar el proceso de serialización manualmente.

La interfaz Externalizable tiene dos métodos, que no tiene la interfaz Serializable , que son llamados por la máquina Java cuando se serializa un objeto. Así es como se ve:

Código
class Cat implements Externalizable
{
 public String name;
 public int age;
 public int weight;

 public void writeExternal(ObjectOutput out)
 {
  out.writeObject(name);
  out.writeInt(age);
  out.writeInt(weight);
}

 public void readExternal(ObjectInput in)
 {
  name = (String) in.readObject();
  age = in.readInt();
  weight = in.readInt();
 }
}

¿Te recuerda algo?

"¡Santo Dios! Así es exactamente como tratamos de guardar objetos antes de considerar la serialización".

"Esto simplifica todo: si la serialización estándar es adecuada, simplemente heredamos la interfaz Serializable . Si no es adecuada, heredamos Externalizable y escribimos nuestro propio código para guardar/cargar nuestro objeto".

"Pero, ¿una clase marcada como Externalizable se considera serializable? ¿Podemos usar una clase de este tipo para almacenar referencias "seguras" a nuestras clases serializables?"

"Sí. Si una clase implementa Serializable o Externalizable , se considera serializable".

"Es la solución perfecta. Me gusta".

"Me alegra escuchar eso. Pero hay más... Deberías preguntarle al profesor Hans sobre todos los matices. Ciertamente existen. Quería darte algo para leer".