"Olá, amigo! Eu gostaria de acrescentar um pouco ao que Ellie lhe disse."

Às vezes, você precisa controlar o processo de serialização. Aqui estão alguns dos motivos:

1) Um objeto não está pronto para serialização : seu estado interno atual está em processo de mudança.

2) Um objeto contém objetos não serializáveis, mas pode convertê-los em um formato que pode ser facilmente serializado , por exemplo, salvá-los como uma matriz de bytes ou outra coisa.

3) Um objeto deseja desserializar todos os seus dados como uma unidade e/ou criptografá-los antes da serialização.

Há muitos motivos pelos quais você pode querer executar a serialização manualmente. Mas não queremos perder todas as vantagens que a serialização padrão oferece. Afinal, nosso objeto pode usar outros objetos. Mas eles não podem ser serializados se nosso objeto não suportar serialização.

Essa situação também tem solução: a interface Externalizável . Devemos agradecer aos criadores visionários de Java. Simplesmente substitua a interface Serializable pela interface Externalizable e sua classe poderá gerenciar o processo de serialização manualmente.

A interface Externalizable possui dois métodos, que a interface Serializable não possui, que são chamados pela máquina Java quando um objeto é serializado. Isto é o que parece:

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();
 }
}

Lembra de alguma coisa?

"Caramba! Foi exatamente assim que tentamos salvar objetos antes de considerarmos a serialização."

"Isso simplifica tudo: se a serialização padrão for adequada, apenas herdamos a interface Serializable . Se não for adequada, herdamos Externalizable e escrevemos nosso próprio código para salvar/carregar nosso objeto."

"Mas uma classe marcada como Externalizável é considerada serializável? Podemos usar essa classe para armazenar com segurança referências às nossas classes serializáveis?"

"Sim. Se uma classe implementa Serializable ou Externalizable , ela é considerada serializável."

"É a solução perfeita. Eu gosto."

"Estou feliz em ouvir isso. Mas há mais do que isso... Você deveria perguntar ao Professor Hans sobre todas as nuances. Elas certamente existem. Ele queria lhe dar algo para ler."