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

La diferencia entre serialización y externalización en Java

La serialización y la externalización son procesos que convierten objetos en bytes de flujo y almacenan el flujo de bytes en bases de datos o memoria. Las clases que implementan la interfaz java.io.Serializable pueden ser serializadas. Por otro lado, según los requisitos de la aplicación, la externalización se utiliza para la serialización personalizada. La externalización extiende java.io.Serializable. 

Número de serieClaveSerializaciónExternalización
1
Interfaz
La serialización es una interfaz de marca 
La externalización contiene dos métodos: readExternal y writeExternal. 
2 
Lógica de implementación 
Las clases que implementan este interfaz delegan la responsabilidad de la serialización o persistencia a Java JVM. JVM utiliza readObject y writeObject para la serialización 
La externalización proporciona lógica de control de implementación al sobrescribir los métodos readExternal y writeExternal.
3 
Métodos para ignorar variables 
En la serialización, el JVM ignora las variables transitorias durante la serialización y deserialización de objetos Java. 
Los programadores pueden escribir su propia lógica para ignorar ciertas variables en el proceso de externalización de objetos Java. 
4 
Rendimiento 
En la interfaz serializable, el uso de reflexión puede causar una disminución en el rendimiento.
La externalización permite un control completo de la implementación. 
5 
Serialización de objetos heredados 
1Si la superclase no se puede serializar, la subclase aún puede ser serializada.
2Si la subclase no se serializa pero la superclase se serializa automáticamente 
También podemos aplicarlo a la externalización.

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

Ejemplo serializable

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