Heim  >  Artikel  >  Java  >  Implementierungsmethoden der Serialisierung und Deserialisierung in der Java-Sprache

Implementierungsmethoden der Serialisierung und Deserialisierung in der Java-Sprache

WBOY
WBOYOriginal
2023-06-10 21:33:42806Durchsuche

Die Java-Sprache ist eine objektorientierte Programmiersprache, die plattformunabhängig, einfach zu erlernen und zu verwenden und äußerst zuverlässig ist. Unter diesen ist die Objektserialisierung und -deserialisierung eine sehr wichtige Funktion in der Java-Sprache, mit der Objekte problemlos in verschiedene JVMs übertragen oder gespeichert werden können. In diesem Artikel werden die Implementierungsmethoden der Java-Sprachserialisierung und -Deserialisierung vorgestellt.

1. Das Konzept der Serialisierung

Serialisierung bezieht sich auf den Prozess der Konvertierung von Objekten in Bytesequenzen, damit sie im Netzwerk übertragen oder gespeichert werden können. Der Serialisierungsprozess kann Java-Objekte in ein gängiges Format wie XML, JSON, Binärstream usw. konvertieren, um sie auf verschiedenen Plattformen zu übertragen und zu verarbeiten. In der Java-Sprache kann die Serialisierung mithilfe der Java.io.Serializable-Schnittstelle implementiert werden.

2. Java.io.Serializable-Schnittstelle

Die Java.io.Serializable-Schnittstelle ist eine von der Java-Sprache bereitgestellte Markierungsschnittstelle, die verwendet wird, um eine Klasse als serialisierbar zu markieren. Nur Klassen, die diese Schnittstelle implementieren, können Serialisierungs- und Deserialisierungsvorgänge ausführen. Diese Schnittstelle implementiert keine Methoden, sie dient lediglich als Markierung, um der JVM mitzuteilen, dass diese Klasse serialisierbar ist.

Eine Klasse, die die Java.io.Serializable-Schnittstelle implementiert, muss die folgenden Bedingungen erfüllen:
1 Die Klasse muss serialisierbar sein, d. h. ihr Zustand kann in einen Bytestream geschrieben werden.
2. Die Klasse muss einen parameterlosen Konstruktor haben.
3. Alle nicht statischen Mitgliedsvariablen dieser Klasse müssen serialisierbar sein.

Das Folgende ist beispielsweise ein Beispiel für eine Klasse, die die Java.io.Serializable-Schnittstelle implementiert:

import java.io.Serializable;

public class Person implements Serializable {
    private String name; // 可序列化的成员变量
    private int age; // 可序列化的成员变量

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

3. Serialisierungsimplementierungsmethoden

Die Java-Sprache bietet zwei Serialisierungsimplementierungsmethoden: die Java.io.ObjectOutputStream-Klasse und die Java.io.ByteArrayOutputStream-Klasse.

  1. Java.io.ObjectOutputStream-Klasse

Die Java.io.ObjectOutputStream-Klasse ist eine Serialisierungsklasse, die von der Java-Sprache bereitgestellt wird. Diese Klasse bietet Methoden zum Serialisieren von Java-Objekten in einen Bytestrom und die Möglichkeit, diese Bytes in einen OutputStream zu schreiben. Das Folgende ist ein Beispiel für eine Methode, die ein Person-Objekt in einen Byte-Stream serialisiert und in eine Datei schreibt:

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class SerializeDemo {
    public static void main(String[] args) {
        Person person = new Person("Tom", 20);

        try {
            FileOutputStream fos = new FileOutputStream("person.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            oos.writeObject(person);

            oos.close();
            fos.close();

            System.out.println("Person对象已经序列化到person.ser中。");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Java.io.ByteArrayOutputStream-Klasse

Die Java.io.ByteArrayOutputStream-Klasse wird von der Java-Sprache bereitgestellt für Serialisierungsart. Diese Klasse bietet Methoden zum Serialisieren von Java-Objekten in Byte-Arrays und die Möglichkeit, diese Bytes in einem ByteArrayOutputStream zu speichern. Das Folgende ist ein Beispiel für eine Methode, die ein Person-Objekt in einen Byte-Stream serialisiert und in einem Byte-Array speichert:

import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;

public class SerializeDemo {
    public static void main(String[] args) {
        Person person = new Person("Tom", 20);

        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);

            oos.writeObject(person);

            byte[] byteArray = bos.toByteArray();

            oos.close();
            bos.close();

            System.out.println("Person对象已经序列化到字节数组中。");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

IV Deserialisierungs-Implementierungsmethoden

Die Java-Sprache bietet zwei Deserialisierungs-Implementierungsmethoden: Java.io.ObjectInputStream-Klasse und Java.io.ByteArrayInputStream-Klasse.

  1. Java.io.ObjectInputStream-Klasse

Die Java.io.ObjectInputStream-Klasse ist eine Deserialisierungsklasse, die von der Java-Sprache bereitgestellt wird. Diese Klasse stellt Methoden bereit, um Bytes aus dem InputStream zu lesen und sie in Java-Objekte zu deserialisieren. Das Folgende ist ein Beispiel für eine Methode, die einen Bytestream aus einer Datei liest und ihn in ein Person-Objekt deserialisiert:

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializeDemo {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("person.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);

            Person person = (Person) ois.readObject();

            ois.close();
            fis.close();

            System.out.println("从person.ser文件中反序列化出了一个Person对象。");
            System.out.println("Person对象的name是:" + person.getName());
            System.out.println("Person对象的age是:" + person.getAge());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Java.io.ByteArrayInputStream-Klasse

Die Java.io.ByteArrayInputStream-Klasse wird von der Java-Sprache bereitgestellt zum Deserialisieren einer serialisierten Klasse. Diese Klasse stellt Methoden bereit, um Bytes aus einem Byte-Array zu lesen und sie in Java-Objekte zu deserialisieren. Das Folgende ist ein Beispiel für eine Methode zum Deserialisieren eines Byte-Arrays in ein Person-Objekt:

import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;

public class DeserializeDemo {
    public static void main(String[] args) {
        try {
            Person person = null;
            byte[] byteArray = // 从其他途径获取的Person对象的字节数组

            ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
            ObjectInputStream ois = new ObjectInputStream(bais);

            person = (Person) ois.readObject();

            ois.close();
            bais.close();

            System.out.println("从字节数组中反序列化出了一个Person对象。");
            System.out.println("Person对象的name是:" + person.getName());
            System.out.println("Person对象的age是:" + person.getAge());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Kurz gesagt, die Serialisierungs- und Deserialisierungsfunktionen der Java-Sprache sind eine sehr wichtige Funktion, mit der Objekte problemlos zwischen verschiedenen JVMs oder Speichern übertragen werden können. Serialisierung und Deserialisierung werden durch die Implementierung der Schnittstelle Java.io.Serializable und die Verwendung der Klassen Java.io.ObjectOutputStream und Java.io.ObjectInputStream erreicht. Gleichzeitig können die Klassen Java.io.ByteArrayOutputStream und Java.io.ByteArrayInputStream diese Vorgänge implementieren.

Das obige ist der detaillierte Inhalt vonImplementierungsmethoden der Serialisierung und Deserialisierung in der Java-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn