Aquí discutiremos cómo serializar y deserializar un objeto y para qué sirve.
¿Qué es la serialización de Java?
La serialización es un mecanismo para convertir un objeto en un flujo de bytes para que pueda escribirse en un archivo, transportarse a través de una red o almacenarse en una base de datos. La deserialización es solo al revés. En pocas palabras, la serialización es convertir un objeto en un flujo de bytes y la deserialización es reconstruir el objeto a partir de un flujo de bytes. La API de serialización de Java proporciona la funcionalidad para realizar la seralización y deserialización. Una clase debe implementar la interfaz java.io.Serializable para ser elegible para la serialización.
Tomemos un ejemplo para comprender mejor los conceptos:
Ejemplo
Esta clase implementa la interfaz serializable, lo que significa que se puede serializar. Todos los campos de esta clase se pueden escribir en un archivo después de convertirse en un flujo de bytes, excepto los campos declarados. transitorio. En el siguiente ejemplo, tenemos dos campos transitorios, estos campos no participarán en la serialización.
Student.java
public class Student implements java.io.Serializable{ private int stuRollNum; private int stuAge; private String stuName; private transient String stuAddress; private transient int stuHeight; public Student(int roll, int age, String name, String address, int height) { this.stuRollNum = roll; this.stuAge = age; this.stuName = name; this.stuAddress = address; this.stuHeight = height; } public int getStuRollNum() { return stuRollNum; } public void setStuRollNum(int stuRollNum) { this.stuRollNum = stuRollNum; } public int getStuAge() { return stuAge; } public void setStuAge(int stuAge) { this.stuAge = stuAge; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuAddress() { return stuAddress; } public void setStuAddress(String stuAddress) { this.stuAddress = stuAddress; } public int getStuHeight() { return stuHeight; } public void setStuHeight(int stuHeight) { this.stuHeight = stuHeight; } }
Serialización del objeto
Esta clase está escribiendo un objeto de la clase Student en el archivo Student.ser. Estamos usando FileOutputStream y ObjectOutputStream para escribir el objeto en File.
Nota: De acuerdo con las mejores prácticas de serialización de Java, el nombre del archivo debe tener la extensión .ser.
import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.IOException; public class SendClass { public static void main(String args[]) { Student obj = new Student(101, 25, "Chaitanya", "Agra", 6); try{ FileOutputStream fos = new FileOutputStream("Student.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.close(); fos.close(); System.out.println("Serialzation Done!!"); }catch(IOException ioe){ System.out.println(ioe); } } }
Producción:
Serialzation Done!!
Desserialización del objeto
Esta clase reconstruirá el objeto de la clase Student después de leer el flujo de bytes del archivo. Observe que los campos de salida, dirección del estudiante y altura del estudiante de esta clase tienen valores de nulo y 0 consecutivamente. Esto se debe a que estos campos se han declarado transitorios en la clase Student.
import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.IOException; public class AcceptClass { public static void main(String args[]) { Student o=null; try{ FileInputStream fis = new FileInputStream("Student.ser"); ObjectInputStream ois = new ObjectInputStream(fis); o = (Student)ois.readObject(); ois.close(); fis.close(); } catch(IOException ioe) { ioe.printStackTrace(); return; }catch(ClassNotFoundException cnfe) { System.out.println("Student Class is not found."); cnfe.printStackTrace(); return; } System.out.println("Student Name:"+o.getStuName()); System.out.println("Student Age:"+o.getStuAge()); System.out.println("Student Roll No:"+o.getStuRollNum()); System.out.println("Student Address:"+o.getStuAddress()); System.out.println("Student Height:"+o.getStuHeight()); } }
Producción:
Student Name:Chaitanya Student Age:25 Student Roll No:101 Student Address:null Student Height:0