Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java - Serialisierung

Java bietet einen Mechanismus namens Objektserialisierung, bei dem ein Objekt als eine Folge von Bytes dargestellt werden kann, die die Daten des Objekts sowie Informationen über den Typ des Objekts und die im Objekt gespeicherten Datentypen enthält.

Nachdem ein serialisiertes Objekt in eine Datei geschrieben wurde, kann es aus der Datei gelesen und deserialisiert werden, d. h. die Typinformationen und Bytes, die das Objekt und seine Daten darstellen, können verwendet werden, um das Objekt im Speicher neu zu erstellen.

Am beeindruckendsten ist, dass der gesamte Prozess JVM-unabhängig ist, was bedeutet, dass ein Objekt auf einer Plattform serialisiert und auf einer völlig anderen Plattform deserialisiert werden kann.

Klassen ObjectInputStream und ObjectOutputStream sind High-Level-Streams, die die Methoden zum Serialisieren und Deserialisieren eines Objekts enthalten.

Die ObjectOutputStream-Klasse enthält viele Schreibmethoden zum Schreiben verschiedener Datentypen, aber eine Methode sticht besonders heraus −

public final void writeObject(Object x) throws IOException

Die obige Methode serialisiert ein Objekt und sendet es an den Ausgabestream. In ähnlicher Weise enthält die ObjectInputStream-Klasse die folgende Methode zum Deserialisieren eines Objekts −

public final Object readObject() throws IOException, ClassNotFoundException

Diese Methode ruft das nächste Objekt aus dem Stream ab und deserialisiert es. Der Rückgabewert ist Object, also müssen Sie ihn in den entsprechenden Datentyp umwandeln.

Um zu demonstrieren, wie die Serialisierung in Java funktioniert, werde ich die Employee-Klasse verwenden, die wir zu Beginn des Buchs besprochen haben. Angenommen, wir haben die folgende Employee-Klasse, die die Serializable-Schnittstelle implementiert −

Beispiel

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 zwei Bedingungen erfüllt sein müssen, damit eine Klasse erfolgreich serialisiert werden kann −

Wenn Sie wissen möchten, ob eine Java-Standardklasse serialisierbar ist oder nicht, sehen Sie in der Dokumentation der Klasse nach. Der Test ist einfach:Wenn die Klasse java.io.Serializable implementiert, dann ist sie serialisierbar; andernfalls nicht.

Serialisieren eines Objekts

Die ObjectOutputStream-Klasse wird verwendet, um ein Objekt zu serialisieren. Das folgende SerializeDemo-Programm instanziiert ein Employee-Objekt und serialisiert es in eine Datei.

Wenn das Programm ausgeführt wird, wird eine Datei namens employee.ser erstellt. Das Programm erzeugt keine Ausgabe, aber studieren Sie den Code und versuchen Sie herauszufinden, was das Programm tut.

Hinweis − Beim Serialisieren eines Objekts in eine Datei besteht die Standardkonvention in Java darin, der Datei eine .ser zu geben Erweiterung.

Beispiel

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

Deserialisieren eines Objekts

Das folgende DeserializeDemo-Programm deserialisiert das im SerializeDemo-Programm erstellte Employee-Objekt. Studieren Sie das Programm und versuchen Sie, seine Ausgabe zu bestimmen −

Beispiel

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

Dies wird das folgende Ergebnis erzeugen −

Ausgabe

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

Hier sind die folgenden wichtigen Punkte zu beachten −


Java

  1. Letztes Java-Schlüsselwort
  2. Java-Instanz des Operators
  3. Verschachtelte statische Java-Klasse
  4. Anonyme Java-Klasse
  5. Java-Singleton-Klasse
  6. Java-Reflexion
  7. Java ObjectOutputStream-Klasse
  8. Java-Generika
  9. Java-Dateiklasse
  10. Java - Objekt und Klassen