Dominando ObjectInputStream de Java: Guía Completa
Clase ObjectInputStream de Java
Explora cómo leer objetos serializados en Java con ObjectInputStream, completo con ejemplos paso a paso y consejos prácticos.
La clase ObjectInputStream en el paquete java.io te permite deserializar objetos que fueron escritos previamente por ObjectOutputStream. Extiende la clase abstracta InputStream.
Antes de sumergirte en ObjectInputStream, asegúrate de estar familiarizado con la clase ObjectOutputStream, ya que maneja el proceso de serialización.
Cómo Funciona ObjectInputStream
La serialización transforma objetos de Java en un flujo de bytes que puede almacenarse o transmitirse. La deserialización—el proceso inverso—es manejada por ObjectInputStream, que lee el flujo de bytes y reconstruye los objetos originales.
Crear un ObjectInputStream
Para crear un ObjectInputStream, primero importa la clase y luego víncala a una fuente, típicamente un FileInputStream:
// Vincular a un archivo
FileInputStream flujoArchivo = new FileInputStream("ejemplo.dat");
// Envolverlo en un ObjectInputStream
ObjectInputStream flujoObj = new ObjectInputStream(flujoArchivo);
Una vez instanciado, flujoObj puede leer cualquier objeto serializado del archivo.
Métodos Principales de ObjectInputStream
A continuación se muestran los métodos más utilizados:
read()– Lee un solo byte.readBoolean()– Lee un valor booleano.readChar()– Lee un carácter.readInt()– Lee un entero.readObject()– Reconstruye un objeto del flujo.
Ejemplo 1: Deserialización Básica
A continuación se muestra un ejemplo mínimo que escribe un entero y una cadena en un archivo, luego los lee de vuelta.
import java.io.*;
public class Main {
public static void main(String[] args) {
int dato1 = 5;
String dato2 = "Esto es programiz";
try {
// Escribir datos
FileOutputStream fos = new FileOutputStream("archivo.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(dato1);
oos.writeObject(dato2);
// Leer datos
FileInputStream fis = new FileInputStream("archivo.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Dato entero: " + ois.readInt());
System.out.println("Dato cadena: " + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Salida
Dato entero: 5 Dato cadena: Esto es programiz
Ejemplo 2: Deserializando un Objeto Personalizado
Serializa y deserializa un objeto Perro simple. Recuerda, la clase debe implementar Serializable para que esto funcione.
import java.io.*;
class Perro implements Serializable {
String nombre;
String raza;
Perro(String nombre, String raza) {
this.nombre = nombre;
this.raza = raza;
}
}
public class Main {
public static void main(String[] args) {
Perro perro = new Perro("Tyson", "Labrador");
try {
// Serializar
FileOutputStream fos = new FileOutputStream("archivo.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(perro);
// Deserializar
FileInputStream fis = new FileInputStream("archivo.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Perro nuevoPerro = (Perro) ois.readObject();
System.out.println("Nombre del Perro: " + nuevoPerro.nombre);
System.out.println("Raza del Perro: " + nuevoPerro.raza);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Salida
Nombre del Perro: Tyson Raza del Perro: Labrador
Conclusiones clave:
- Usa
ObjectOutputStreampara escribir objetos. - Usa
ObjectInputStreampara leerlos de vuelta. - Solo los objetos que implementan
Serializablepueden ser serializados.
Métodos Adicionales de ObjectInputStream
| Método | Descripción |
|---|---|
available() | Retorna el número de bytes que se pueden leer sin bloqueo. |
mark() | Marca la posición actual en el flujo. |
reset() | Restablece el flujo a la marca más reciente. |
skipBytes(int n) | Salta n bytes. |
close() | Cierra el flujo y libera recursos. |
Para más detalles, visita la documentación oficial de Java.
Java
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ArrayList en Java: Operaciones, métodos y mejores prácticas
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación