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.