Latest web development tutorials

serializacji Java

Java zapewnia mechanizm serializacji obiektowo, które obiekt może być reprezentowany jako ciąg bajtów sekwencję bajtów zawiera typ danych obiektu, informacje o obiekcie i typu danych przechowywanych w obiekcie ,

Gdy plik jest zapisywany na odcinkach obiektu można odczytać z pliku i jest rozszeregować, czyli rodzaj informacji, obiekt, obiekty danych i typów danych obiektów można stosować w pamięci nowe obiekty.

Cały proces jest Java Virtual Machine (JVM) niezależne, czyli na platformie odcinkach obiektu można deserializować obiekt na zupełnie innej platformie.

ObjectInputStream i ObjectOutputStream klasy strumienie danych na wysokim poziomie, oraz metody serializacji obiektów zawierają anty-Sequence.

Klasa ObjectOutputStream zawiera wiele metod zapisu do zapisywania różnych typów danych, ale sposób szczególny wyjątki:

public final void writeObject(Object x) throws IOException

Powyższa metoda serializacji obiektu i wysłać go do strumienia wyjściowego. Podobny klasy ObjectInputStream zawiera następujące deserializowania metodę wykonania obiektu:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Metoda ta trwa kolejny obiekt ze strumienia, a obiekt jest rozszeregować. Jego wartość zwracany jest obiekt, więc trzeba go przekonwertować do odpowiedniego typu danych.

Aby zademonstrować serializacji Java jest, jak to działa, użyję tutorial class Employee wspomniano wcześniej, jeśli zdefiniujemy następujące klasy pracownika, który implementuje interfejs 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);
   }
}

Należy pamiętać, że serializacji klasa obiektu, aby odnieść sukces, dwa warunki muszą być spełnione:

Klasa musi implementować java.io.Serializable obiekt.

Wszystkie te atrybuty muszą być serializacji. Jeśli istnieje właściwość nie jest możliwy do serializacji, obiekt musi być podana krótko.

Jeśli chcesz wiedzieć, czy standard klasy Java jest serializacji można znaleźć w dokumentacji dla tej klasy. Badanie, czy instancja klasy mogą być serializowane jest bardzo prosta, wystarczy zobaczyć klasa nie osiągnęła java.io.Serializable interfejs.


zserializowanego

Klasa ObjectOutputStream służy do serializacji obiektu, SerializeDemo Poniższy przykład tworzy instancję obiektu pracownikiem, a obiekt jest szeregowane do pliku.

Po tym program jest wykonywany, tworzy plik o nazwie employee.ser. Ten program nie ma wyjścia, ale można odczytać kodu, aby zrozumieć rolę programu.

Uwaga: Gdy obiekt jest szeregowane do pliku, zgodnie ze standardową konwencją Java jest złożyć przedłużenie .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();
      }
   }
}

obiekty deserializowania

Poniższy przykładowy program DeserializeDemo deserializacji, / tmp / employee.ser przechowywany obiekt pracownika.

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);
    }
}

Skompilować i uruchomić powyższy program Wyniki są następujące:

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

Tutaj musimy zwrócić uwagę na następujące kwestie:

Sposób próby try / catch do połowu wyjątek ClassNotFoundException readObject (). Dla JVM można deserializować obiektu, musi on być w stanie znaleźć klas kodu bajtowego. Jeśli JVM nie można znaleźć klasy w procesie deserializacji obiektu, rzucać wyjątek ClassNotFoundException.

Zauważ, że wartość zwracana metoda readObject () przekształca się w odniesieniu pracownika.

Gdy obiekt jest seryjny, wartość nieruchomości SSN 111 222 333, ale ponieważ nieruchomość jest krótki, wartość ta nie została wysłana do strumienia wyjściowego. Więc SSN atrybut innej niż serializowana obiektu Pracownik 0.