Categorías
Basics I/O Java Serialization

Serialización de Java

¿Qué es la serialización?

En Java, la serialización de objetos significa representar un objeto como una secuencia de bytes. Los bytes incluyen los datos y la información del objeto. Un objeto serializado puede escribirse en un archivo / base de datos, leerse del archivo / base de datos y deserializarse. Los bytes que representan el objeto y sus datos se pueden usar para recrear el objeto en la memoria.

¿Por qué necesitamos la serialización?

La serialización se usa generalmente cuando necesita enviar un objeto a través de la red o almacenarlo en archivos. La infraestructura de red y el disco duro solo pueden comprender bits y bytes, pero no objetos Java. La serialización traduce los objetos Java a bytes y los envía a través de la red o los guarda.

¿Por qué queremos almacenar o transferir un objeto? En mi experiencia en programación, tengo las siguientes razones que me motivan a usar objetos serializables.

  1. La creación de un objeto depende de mucho contexto. Una vez creado, sus métodos y sus campos son obligatorios para otros componentes.
  2. Cuando se crea un objeto y contiene muchos campos, no estamos seguros de qué utilizar. Así que guárdelo en la base de datos para su posterior análisis de datos.

Ejemplo de serialización de Java

El siguiente ejemplo muestra cómo hacer una clase serializable y serializarla y deserializarla.

package serialization;
 
import java.io.Serializable;
 
public class Dog implements Serializable {
	private static final long serialVersionUID = -5742822984616863149L;
 
	private String name;
	private String color;
	private transient int weight;
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public String getColor() {
		return color;
	}
 
	public void setColor(String color) {
		this.color = color;
	}
 
	public int getWeight() {
		return weight;
	}
 
	public void setWeight(int weight) {
		this.weight = weight;
	}
 
	public void introduce() {
		System.out.println("I have a " + color + " " + name + ".");
	}
}
  LeetCode - Juego de salto (Java)
package serialization;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
public class SerializeDemo {
	public static void main(String[] args) {
		//create an object
		Dog e = new Dog();
		e.setName("bulldog");
		e.setColor("white");
		e.setWeight(5);
 
		//serialize
		try {
			FileOutputStream fileOut = new FileOutputStream("./dog.ser");
			ObjectOutputStream out = new ObjectOutputStream(fileOut);
			out.writeObject(e);
			out.close();
			fileOut.close();
			System.out.printf("Serialized dog is saved in ./dog.ser");
		} catch (IOException i) {
			i.printStackTrace();
		}
 
		e = null;
 
		//Deserialize
		try {
			FileInputStream fileIn = new FileInputStream("./dog.ser");
			ObjectInputStream in = new ObjectInputStream(fileIn);
			e = (Dog) in.readObject();
			in.close();
			fileIn.close();
		} catch (IOException i) {
			i.printStackTrace();
			return;
		} catch (ClassNotFoundException c) {
			System.out.println("Dog class not found");
			c.printStackTrace();
			return;
		}
 
		System.out.println("nDeserialized Dog ...");
		System.out.println("Name: " + e.getName());
		System.out.println("Color: " + e.getColor());
		System.out.println("Weight: " + e.getWeight());
 
		e.introduce();
 
	}
}
  Java lee un archivo línea por línea: ¿de cuántas maneras?

Producción:

Serialized dog is saved in ./dog.ser
Deserialized Dog...
Name: bulldog
Color: white
Weight: 0
I have a white bulldog.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *