Latest web development tutorials

serialización de Java

Java proporciona un mecanismo de objeto-serialización, la cual, un objeto puede ser representado como una secuencia de bytes, la secuencia de bytes incluye el tipo de datos del objeto, la información sobre el objeto y el tipo de datos almacenados en el objeto .

Después de que el archivo se escribe en un objeto serializado se puede leer desde el archivo, y se deserializar, es decir, el tipo de información de objeto, los objetos de datos y tipos de datos de objetos se puede utilizar en la memoria los nuevos objetos.

Todo el proceso es una Máquina Virtual Java (JVM) independiente, es decir, en un objeto serializado plataforma puede deserializar el objeto en una plataforma completamente diferente.

ObjectInputStream corrientes y ObjectOutputStream clase de alto nivel de datos, serialización y métodos que contienen objetos anti-secuencia.

ObjectOutputStream clase contiene muchos método de escritura para escribir una variedad de tipos de datos, sino una forma excepciones especiales:

public final void writeObject(Object x) throws IOException

El método anterior serializar un objeto y lo envía a la secuencia de salida. ObjectInputStream clase similar contenga la siguiente deserializar método de un objeto:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Este método tiene el siguiente objeto de la corriente, y el objeto se deserializa. Su valor de retorno es objeto, por lo que necesita para convertirlo en el tipo de datos adecuado.

Para demostrar la serialización de Java es cómo funciona, voy a utilizar el tutorial clase Employee se mencionó antes, si definimos la siguiente clase Employee, que implementa la interfaz Serializable.

public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}

Tenga en cuenta que una serialización de objetos de clase con el fin de tener éxito, deben cumplirse dos condiciones:

La clase debe implementar objeto java.io.Serializable.

Todos estos atributos deben ser serializables. Si hay una propiedad no es serializable, la propiedad debe explicarse brevemente.

Si desea saber si una clase Java estándar es serializable, consulte la documentación para esta clase. Prueba si hay una instancia de una clase puede ser serializado es muy simple, sólo hay que ver la clase no ha logrado interfaz java.io.Serializable.


objeto serializado

ObjectOutputStream clase se utiliza para serializar un objeto, SerializeDemo siguiente ejemplo se crea una instancia de un objeto Empleado, y el objeto se serializa en un archivo.

Después de ejecutar este programa, se crea un archivo llamado employee.ser. Este programa no tiene salida, pero se puede leer el código para entender el papel de un programa.

Nota: Cuando un objeto se serializa en un archivo, de acuerdo con la convención estándar de Java es presentar una extensión .ser.

import java.io.*;

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}

deserializar objetos

El siguiente ejemplo de programa DeserializeDemo deserialización, / tmp / employee.ser almacena objeto Empleado.

import java.io.*;
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

Compilar y ejecutar el programa anterior los resultados son los siguientes:

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

Aquí hay que destacar los siguientes puntos:

readObject () en un intento de tratar de bloque / catch para detectar ClassNotFoundException excepción. Para la JVM puede deserializar objeto, debe ser capaz de encontrar las clases de código de bytes. Si la JVM no puede encontrar la clase en el procedimiento objeto de deserialización, lanzar una excepción ClassNotFoundException.

Tenga en cuenta que el valor de retorno, método readObject () se convierte en la referencia del empleado.

Cuando se serializa un objeto, el valor de la propiedad SSN 111 222 333, pero debido a que la propiedad es corta, el valor no se envía el flujo de salida. Así SSN atributo de objeto Empleado deserializado es 0.