English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

The difference between serialization and externalization in Java

La sérialisation et l'externalisation sont des processus consistant à convertir des objets en flux de bytes et à stocker ces flux de bytes dans une base de données ou en mémoire. Les classes implémentant l'interface java.io.Serializable peuvent être sérialisées. D'autre part, selon les exigences de l'application, l'externalisation est utilisée pour la sérialisation personnalisée. L'externalisation étend java.io.Serializable. 

NuméroCléSérialisationExternalisation
1
Interface
La sérialisation est une interface marquante 
L'externalisation contient deux méthodes readExternal et writeExternal. 
2 
Logique de mise en œuvre 
Les classes implémentant cette interface transfèrent la responsabilité de la sérialisation ou de la persistance au JVM. Le JVM utilise readObject et writeObject pour la sérialisation 
L'externalisation fournit une logique de contrôle de mise en œuvre pour l'application en redéfinissant les méthodes readExternal et writeExternal.
3 
Méthodes pour ignorer les variables 
Dans la sérialisation, le JVM ignore les variables transitoires pendant la sérialisation et la désérialisation des objets Java. 
Les programmeurs peuvent écrire leur propre logique pour ignorer certaines variables du processus d'externalisation des objets Java. 
4 
Performances 
Dans l'interface sérialisable, l'utilisation de la réflexion entraîne une réduction des performances.
L'externalisation permet un contrôle complet de la mise en œuvre. 
5 
Serialisation d'objets hérités 
1. Si la super-classe n'est pas sérialisée, la sous-classe peut tout de même être sérialisée.
2. Si la sous-classe n'est pas sérialisée mais que la super-classe est sérialisée automatiquement 
Nous pouvons également l'appliquer à l'externalisation.

Exemple externalizable

class ExternalizableExample implements Externalizable {
   Integer id;
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeInt(id);
   }
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
      this.id = in.readInt();
   }
}

Exemple sérialisable

class SerializableExample implements Serializable {
   private static final long serialVersionUID = 5081877L;
   String name;
}