Latest web development tutorials

Java Serialisierung

Java stellt einen Mechanismus objekt Serialisierung, die kann ein Objekt als eine Folge von Bytes dargestellt werden, die Byte-Sequenz, die die Art der Daten des Objekts enthält, Information über das Objekt und die Art der Daten in dem Objekt gespeichert .

Nachdem die Datei auf einen serialisierten Objekts geschrieben ist, kann aus der Datei ausgelesen werden, und es wird deserialisiert, das heißt, kann die Art der Objektinformationen, Datenobjekte und Datenobjekttypen im Speicher verwendet werden, die neuen Objekte.

Der gesamte Prozess ist eine Java Virtual Machine (JVM) unabhängig, das heißt, auf einer Plattform serialisiert Objekt kann das Objekt auf einer ganz anderen Plattform deserialisieren.

Object und Object Klasse High-Level-Datenströme, Serialisierung und Methoden, die sie enthalten anti-Sequenz-Objekte.

Object Klasse enthält viele Schreibverfahren eine Vielzahl von Datentypen zu schreiben, aber eine besondere Ausnahmen Weise:

public final void writeObject(Object x) throws IOException

Die obige Methode ein Objekt serialisiert und an den Ausgabe-Stream senden. Ähnliche Object Klasse enthält die folgenden die Methode eines Objektes deserialisieren:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Bei dieser Methode wird das nächste Objekt aus dem Strom, und das Objekt deserialisiert. Der Rückgabewert ist Objekt, so müssen Sie es auf die entsprechende Datentyp zu konvertieren.

Um zu demonstrieren, die Java-Serialisierung ist, wie es funktioniert, werde ich die Klasse Employee Tutorial bereits erwähnt verwenden, wenn wir die folgenden Employee-Klasse definieren, die die Serializable-Schnittstelle implementiert.

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

Beachten Sie, dass ein Klassenobjekt Serialisierung, um erfolgreich zu sein, zwei Bedingungen erfüllt sein müssen:

Die Klasse muss java.io.Serializable Objekt implementieren.

Alle diese Attribute müssen serialisierbar sein. Wenn es eine Eigenschaft ist nicht serialisierbar ist, muss die Eigenschaft kurz angegeben werden.

Wenn Sie, ob eine Java-Standard-Klasse ist serializable wissen möchten, finden Sie in der Dokumentation für diese Klasse. Testen Sie, ob eine Instanz einer Klasse kann sehr einfach serialisiert werden, müssen nur die Klasse zu sehen, hat java.io.Serializable Schnittstelle nicht erreicht.


serialisierten Objekt

Object Klasse wird verwendet, um ein Objekt zu serialisieren, instanziiert SerializeDemo folgende Beispiel ein Employee-Objekt, und das Objekt in eine Datei serialisiert.

Nach diesem Programm ausgeführt wird, erstellt er eine Datei employee.ser benannt. Dieses Programm hat keine Ausgabe, aber Sie können den Code zu verstehen, die Rolle eines Programms lesen.

Hinweis: Wenn ein Objekt in einer Datei, in Übereinstimmung mit dem Standard - Java - Konvention serialisiert ist eine SER - Erweiterung einzureichen.

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

Deserialize Objekte

Das folgende Programmbeispiel DeserializeDemo Deserialisierung / tmp / employee.ser Employee-Objekt gespeichert.

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

Kompilieren und das obige Programm Ergebnisse sind wie folgt ausgeführt werden:

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

Hier müssen wir die folgenden Punkte beachten:

readObject- () -Methode in einem try / catch-Block versucht ClassNotFoundException Ausnahme zu fangen. Für die JVM Objekt deserialisieren kann, muss es in der Lage sein, die Bytecode-Klassen zu finden. Wenn die JVM kann die Klasse nicht in der Deserialisierung Objekt zu finden, eine ClassNotFoundException Ausnahme werfen.

Beachten Sie, dass der Rückgabewert, readObject- () -Methode Mitarbeiterreferenz umgewandelt wird.

Wenn ein Objekt serialisiert wird, 111 der Wert der Eigenschaft SSN 222 333, sondern weil das Objekt kurz ist, wird der Wert nicht in den Ausgabestream gesendet. So Attribut SSN entserialisierten Employee-Objekt 0 ist.