¿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.
- La creación de un objeto depende de mucho contexto. Una vez creado, sus métodos y sus campos son obligatorios para otros componentes.
- 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 + "."); } } |
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(); } } |
Producción:
Serialized dog is saved in ./dog.ser Deserialized Dog... Name: bulldog Color: white Weight: 0 I have a white bulldog.