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

La differenza tra serializzazione e externalizzazione in Java

La serializzazione e l'esternalizzazione sono processi che trasformano gli oggetti in flussi di byte e memorizzano il flusso di byte nei database o nella memoria. Le classi che implementano l'interfaccia java.io.Serializable possono essere serializzate. D'altra parte, l'esternalizzazione viene utilizzata per la serializzazione personalizzata in base alle esigenze dell'applicazione. L'esternalizzazione estende java.io.Serializable. 

NumeroChiaveSerializzazioneEsternizzazione
1
Interfaccia
La serializzazione è un'interfaccia di etichetta 
L'esternizzazione contiene due metodi readExternal e writeExternal. 
2 
Logica di implementazione 
Le classi che implementano questo'interfaccia delegano la responsabilità di serializzazione o persistenza al JVM. Il JVM utilizza readObject e writeObject per la serializzazione 
L'esternizzazione fornisce un controllo logico di implementazione all'applicazione tramite la sovrascrittura dei metodi readExternal e writeExternal.
3 
Metodi per ignorare le variabili 
Nel processo di serializzazione, il JVM ignora le variabili transient durante la serializzazione e la deserializzazione degli oggetti Java. 
Il programmatore può scrivere la propria logica per ignorare alcune variabili durante il processo di esternizzazione di un oggetto Java. 
4 
Prestazioni 
Nel'interfaccia serializzabile, l'uso della reflection può ridurre le prestazioni.
L'esternizzazione può controllare completamente il metodo di attuazione. 
5 
Serializzazione degli oggetti con ereditarietà 
1. Se la superclasse non è serializzabile, la sottoclasse può ancora essere serializzata.
2. Se la sottoclasse non è serializzabile ma la superclasse lo è automaticamente 
Possiamo anche applicarlo all'esternizzazione.

Esempio esterno

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

Esempio serializzabile

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