Aquí vamos a discutir cómo serializar y des-serializar un objeto y cuál es su uso.
¿Qué es la serialización en Java?
La serialización es un mecanismo para convertir un objeto en un flujo de bytes para que pueda ser escrito en un archivo, transportado a través de una red o almacenado en una base de datos. La des-serialización es justo lo contrario. En palabras sencillas, 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 las características para realizar la seralización y la deserialización. Una clase debe implementar la interfaz java.io.Serializable para ser elegible para la serialización.
Tomemos un ejemplo para entender mejor los conceptos:
Ejemplo
Esta clase implementa una interfaz serializable, lo que significa que puede ser serializada. Todos los campos de esta clase pueden ser escritos en un archivo después de ser convertidos a flujo de bytes, excepto aquellos campos que son declarados transitorios. En el siguiente ejemplo tenemos dos campos transitorios, estos campos no participarán en la serialización.
Estudiante.java
clase pública El estudiante implementa java.io.Serializable{ privado int stuRollNum; privado int stuAge; privado String stuName; privado transitorio String stuAddress; privado transitorio int stuHeight; público Estudiante(int roll, int age, String name, String address, int height) { esto.stuRollNum = rollo; this.stuAge = edad; this.stuName = nombre; this.stuAddress = dirección; this.stuHeight = altura; } 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 de los estudiantes en el archivo Student.ser. Estamos usando FileOutputStream y ObjectOutputStream para escribir el objeto en el archivo.
Nota: Según las mejores prácticas de Serialización de Java, el nombre del archivo debe tener la extensión .ser.
importar java.io.FileOutputStream;importar java.io.ObjectOutputStream;importar 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 = nuevo ObjectOutputStream(fos); oos.writeObject(obj); oos.close(); fos.close(); System.out.println("Serialización Hecha!!"); }catch(IOException ioe){ System.out.println(ioe); } }}
Salida:
¡Serialización hecha!
Des-serialización del objeto
Esta clase reconstruiría el objeto de la clase de los estudiantes después de leer el flujo de bytes del archivo. Observe la salida de esta clase, la dirección del estudiante y los campos de altura del estudiante tienen valores nulos y 0 consecutivamente. Esto se debe a que estos campos fueron declarados transitorios en la clase de Student.
importar java.io.FileInputStream;importar java.io.ObjectInputStream;importar java.io.IOException;public class AcceptClass { public static void main(String args[]) { Student o=null; try{ FileInputStream fis = new FileInputStream("Student.ser"); ObjectInputStream ois = nuevo ObjectInputStream(fis); o = (Estudiante)ois.readObject(); ois.close(); fis.close(); } catch(IOException ioe) { ioe.printStackTrace(); return; }catch(ClassNotFoundException cnfe) { System.out.println("La clase del estudiante no se encuentra."); cnfe.printStackTrace(); return; } System.out.println("Nombre del Estudiante:"+o.getStuName()); System.out.println("Edad del Estudiante:"+o.getStuAge()); System.out.println("Número de Rollo del Estudiante:"+o.getStuRollNum()); System.out.println("Dirección del estudiante:"+o.getStuAddress()); System.out.println("Altura del estudiante:"+o.getStuHeight()); }}
Salida:
Nombre del estudiante:ChaitanyaEdad del estudiante:25Número de rollo del estudiante:101Dirección del estudiante:nullAltura del estudiante:0