428 Stimmen

Was ist Objektserialisierung?

Was ist mit "Objektserialisierung" gemeint? Können Sie das bitte anhand einiger Beispiele erklären?

2voto

Esko Punkte 28242

Die Serialisierung ist der Prozess der Umwandlung eines Java-Objekts in ein Byte-Array und dann wieder zurück in ein Objekt mit seinem erhaltenen Zustand. Nützlich für verschiedene Dinge wie das Senden von Objekten über das Netzwerk oder das Zwischenspeichern von Dingen auf der Festplatte.

Lesen Sie mehr von diesen kurzen Artikel, der den Teil der Programmierung recht gut erklärt und gehen dann über zu Serialisierbar javadoc . Vielleicht sind Sie auch an folgender Lektüre interessiert diese verwandte Frage .

2voto

Ran Adler Punkte 3315

Rückgabe der Datei als Objekt : http://www.tutorialspoint.com/java/java_serialization.htm

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

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

1voto

Sujay U N Punkte 4456

|*| Serialisierung einer Klasse: Umwandlung eines Objekts in Bytes und von Bytes zurück in ein Objekt (Deserialisierung).

class NamCls implements Serializable
{
    int NumVar;
    String NamVar;
}

|=> Objekt-Serialisierung ist der Prozess der Umwandlung des Zustands eines Objekts in eine Menge von Bytes.

  • |-> Implementieren, wenn das Objekt über die Lebensdauer der JVM hinaus bestehen bleiben soll.

  • |-> Serialisiertes Objekt kann in der Datenbank gespeichert werden.

  • |-> Serialisierbare Objekte können von Menschen nicht gelesen und verstanden werden, so dass wir Sicherheit erreichen können.

|=> Objekt-Deserialisierung ist der Prozess, bei dem der Zustand eines Objekts abgerufen und in einem Objekt (java.lang.Object) gespeichert wird.

  • |-> Vor dem Speichern des Status wird geprüft, ob die serialVersionUID aus der Eingabedatei/dem Netzwerk und die serialVersionUID der Klassendatei übereinstimmen.
    &nbsp&nbspWenn nicht: java.io.InvalidClassException.

|=> Ein Java-Objekt ist nur serialisierbar, wenn seine Klasse oder eine seiner Oberklassen

  • implementiert entweder die Schnittstelle java.io.Serializable oder

  • seine Unterschnittstelle, java.io.Externalizable.

|=> Statische Felder in einer Klasse können nicht serialisiert werden.

class NamCls implements Serializable
{
    int NumVar;
    static String NamVar = "I won't be serializable";;
}

|=> Wenn Sie eine Variable einer Klasse nicht serialisieren wollen, verwenden Sie das Schlüsselwort transient

class NamCls implements Serializable
{
    int NumVar;
    transient String NamVar;
}

|=> Wenn eine Klasse serializable implementiert, sind alle ihre Unterklassen ebenfalls serialisierbar.

|=> Wenn eine Klasse einen Verweis auf eine andere Klasse hat, müssen alle Verweise serialisierbar sein, sonst wird der Serialisierungsprozess nicht durchgeführt. In einem solchen Fall,
NotSerializableException wird zur Laufzeit ausgelöst.

0voto

Ich möchte eine Analogie vorschlagen, um den konzeptionellen Zweck/die praktische Bedeutung der folgenden Punkte zu verdeutlichen Objektserialisierung/-deserialisierung .

Ich stelle mir vor Objektserialisierung/-deserialisierung im Zusammenhang mit dem Versuch, ein Objekt durch einen Regenwasserkanal zu bewegen. Das Objekt wird im Wesentlichen "zersetzt" oder serialisiert in weitere modulare Versionen seiner selbst - in diesem Fall eine Bytes-Reihe - um tatsächlich ein Medium durchqueren zu können. In einem rechnerischen Sinn könnten wir den Weg, den die Bytes durch den Regenwasserkanal zurücklegen, als einen Weg der Bytes durch ein Netzwerk betrachten. Wir wandeln unser Objekt um, um es an eine wünschenswerte Transportart oder ein wünschenswertes Format anzupassen. Das serialisierte Objekt wird in der Regel in einer Binärdatei gespeichert, aus der später gelesen oder in die geschrieben werden kann, oder beides.

Wenn unser Objekt in der Lage ist, als zerlegte Reihe von Bytes durch den Abfluss zu rutschen, möchten wir diese Darstellung des Objekts vielleicht als Binärdaten in einer Datenbank oder auf einer Festplatte speichern. Das Wichtigste ist jedoch, dass wir bei der Serialisierung/Deserialisierung die Möglichkeit haben, unser Objekt nach der Serialisierung in seiner binären Form zu belassen oder die ursprüngliche Form des Objekts durch Deserialisierung "wiederherzustellen".

0voto

netblogger Punkte 31

Die Serialisierung ist ein Prozess, bei dem der spezifische Zustand eines Objekts durch Umwandlung in Bytecode gespeichert wird. Dieser umgewandelte Bytecode wird zur Übertragung von Objektzuständen zwischen zwei JVMs verwendet, wobei die empfangende JVM den Bytecode deserialisiert, um den Zustand des freigegebenen Objekts abzurufen. Die Serialisierung und De-Serialisierung erfolgt unter Verwendung der serialVersionUID als Referenz in JVMS.

In Java wird das Gleiche durch die Serialisierungs- und Externalisierungsschnittstellen erreicht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X