0Pricing
Java Academy · Lección

Fundamentos de la serialización en Java

Implemente Serializable, escriba objetos en streams con ObjectOutputStream y vuelva a leerlos.

Fundamentos de la serialización en Java es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

¿Qué es la serialización de Java?

La serialización convierte el estado de un objeto en un flujo de bytes para poder guardarlo en disco, enviarlo por una red o almacenarlo en una base de datos. La deserialización invierte el proceso.

La interfaz de marcador Serializable

Para serializar una clase, implemente java.io.Serializable. No tiene métodos; indica a la JVM que las instancias de esta clase se pueden serializar.

import java.io.Serializable;
public class User implements Serializable {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override public String toString() { return name + " / " + age; }
}

Escritura de un objeto con ObjectOutputStream

Envuelva un FileOutputStream en un ObjectOutputStream y llame a writeObject() para serializarlo.

import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.ser"))) {
    oos.writeObject(new User("Alice", 30));
    System.out.println("Serialized successfully");
}

Lectura de un objeto con ObjectInputStream

Envuelva un FileInputStream en un ObjectInputStream y llame a readObject() para deserializarlo. Convierta el resultado al tipo esperado.

import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("user.ser"))) {
    User u = (User) ois.readObject();
    System.out.println("Deserialized: " + u);
}

Serialización de un grafo de objetos

Todos los objetos a los que hace referencia el objeto serializado también deben implementar Serializable; de lo contrario, se lanza una NotSerializableException durante la ejecución.

public class Order implements Serializable {
    private User customer;   // User must be Serializable
    private List<String> items;
    public Order(User customer, List<String> items) {
        this.customer = customer;
        this.items = items;
    }
}

NotSerializableException

Si algún campo del grafo de objetos no es serializable y no está marcado como transient, Java lanza NotSerializableException al escribir.

// Thread is NOT Serializable
public class Task implements Serializable {
    private Thread worker; // throws NotSerializableException!
    // Fix: mark as transient
    private transient Thread worker2;
}

El grafo de objetos y las referencias compartidas

Java realiza un seguimiento de la identidad de los objetos durante la serialización. Si dos campos hacen referencia al mismo objeto, solo se escribe una copia y ambos campos apuntan a la misma instancia deserializada.

Serialización de colecciones

Las colecciones estándar, como ArrayList, HashMap y LinkedList, ya implementan Serializable, por lo que se serializan siempre que sus elementos también lo hagan.

List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("names.ser"))) {
    oos.writeObject(names);
}

Herencia y serialización

Si una superclase es Serializable, todas sus subclases también son serializables. Si la superclase NO es serializable, sus campos no se guardan; la superclase debe tener un constructor sin argumentos para la deserialización.

Verificación del flujo de bytes

El flujo de bytes serializado comienza con los bytes mágicos 0xACED 0x0005. Puede inspeccionarlo con un editor hexadecimal o decodificarlo con las herramientas de SerialVer para comprender el formato.

Advertencia de seguridad

La deserialización de Java es un vector de ataque conocido. Nunca deserialice datos de fuentes que no sean de confianza sin validarlos. Para los datos externos, prefiera JSON, Protobuf o sobres firmados.

Comprobación rápida

¿Qué método serializa un objeto en un flujo?

Repaso

La serialización de Java utiliza ObjectOutputStream / ObjectInputStream. Las clases deben implementar Serializable. Evite serializar datos que no sean de confianza; para el código nuevo, prefiera alternativas modernas.

Preguntas frecuentes

¿La lección «Fundamentos de la serialización en Java» es gratis?

Sí — el texto completo de «Fundamentos de la serialización en Java» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Fundamentos de la serialización en Java»?

Implemente Serializable, escriba objetos en streams con ObjectOutputStream y vuelva a leerlos. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Fundamentos de la serialización en Java»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de la serialización en Java
  2. Campos transient y serialVersionUID
  3. Serialización personalizada: writeObject y readObject
  4. Alternativas modernas: JSON y Protocol Buffers
← Volver a Java Academy