Latest web development tutorials

serialização Java

Java fornece um mecanismo de objeto de serialização, que, um objeto pode ser representado como uma sequência de bytes, a seqüência de byte inclui o tipo de dados do objeto, as informações sobre o objeto e o tipo de dados armazenado no objeto .

Depois que o arquivo é escrito para um objeto serializado pode ser lido a partir do arquivo, e ele é anular, ou seja, o tipo de informações de objeto, objetos de dados e tipos de dados de objetos podem ser usados ​​na memória os novos objetos.

O processo todo é uma Máquina Virtual Java (JVM) independente, isto é, em um objeto plataforma serializado pode desserializar o objeto em uma plataforma completamente diferente.

fluxos ObjectInputStream e ObjectOutputStream classe de alto nível de dados, serialização e métodos que eles contêm objetos anti-sequência.

classe ObjectOutputStream contém muitos método de gravação para gravar uma variedade de tipos de dados, mas uma exceções especiais maneira:

public final void writeObject(Object x) throws IOException

O método acima serializar um objeto e enviá-lo para o fluxo de saída. Semelhante classe ObjectInputStream contém a seguinte desserializar o método de um objeto:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Este método leva o próximo objeto do fluxo, eo objeto é desserializado. Seu valor de retorno é objeto, então você precisa convertê-lo para o tipo de dados apropriado.

Para demonstrar a serialização Java é assim que funciona, vou usar o tutorial classe Employee mencionado antes, se definirmos a seguinte classe de funcionários, que implementa a interface 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);
   }
}

Note-se que uma serialização objeto de classe para atingir o sucesso, devem ser cumpridas duas condições:

A classe deve implementar java.io.Serializable objeto.

Todos esses atributos devem ser serializáveis. Se houver uma propriedade não é serializável, a propriedade deve ser declarado brevemente.

Se você quiser saber se uma classe Java padrão pode ser serializado, consulte a documentação para esta classe. Teste se uma instância de uma classe pode ser serializado é muito simples, só precisa ver a classe não tem conseguido de interface java.io.Serializable.


objeto serializado

classe ObjectOutputStream é usado para serializar um objeto, SerializeDemo exemplo a seguir instancia um objeto Employee, e o objeto é serializado em um arquivo.

Após este programa é executado, ele cria um arquivo chamado employee.ser. Este programa não tem saída, mas você pode ler o código para compreender o papel de um programa.

Nota: Quando um objeto é serializado para um arquivo, de acordo com a convenção de Java padrão é arquivar uma extensão .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();
      }
   }
}

objetos desserializá

O seguinte exemplo de programa DeserializeDemo desserialização, / tmp / employee.ser armazenado objeto Employee.

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 e executar o programa acima resultados são os seguintes:

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

Aqui devemos observar os seguintes pontos:

readObject () método em um try / catch bloco tentativas de capturar a exceção ClassNotFoundException. Para a JVM pode desserializar objeto, ele deve ser capaz de encontrar as classes de bytecode. Se a JVM não consegue encontrar a classe no objeto de processo de desserialização, lançar uma exceção ClassNotFoundException.

Note-se que o valor de retorno, o método readObject () é convertido em referência Employee.

Quando um objeto é serializado, o valor da propriedade SSN 111 222 333, mas porque a propriedade é curto, o valor não será enviado para o fluxo de saída. Então SSN atribuir serializado objeto Employee é 0.