ホームページ  >  記事  >  Java  >  Java言語でのシリアライズとデシリアライズの実装方法

Java言語でのシリアライズとデシリアライズの実装方法

WBOY
WBOYオリジナル
2023-06-10 21:33:42808ブラウズ

Java 言語は、プラットフォームに依存せず、学習と使用が簡単で、信頼性の高いオブジェクト指向プログラミング言語です。その中でも、オブジェクトのシリアル化と逆シリアル化は Java 言語の非常に重要な機能であり、オブジェクトを異なる JVM に簡単に送信したり保存したりできます。この記事では、Java言語のシリアライズとデシリアライズの実装方法を紹介します。

1. シリアル化の概念

シリアル化とは、オブジェクトをネットワーク上で送信または保存できるように、オブジェクトをバイト シーケンスに変換するプロセスを指します。シリアル化プロセスでは、Java オブジェクトを XML、JSON、バイナリ ストリームなどの共通形式に変換して、さまざまなプラットフォームで送信および処理できます。 Java 言語では、Java.io.Serializable インターフェイスを使用してシリアル化を実装できます。

2. Java.io.Serializable インターフェイス

Java.io.Serializable インターフェイスは、Java 言語によって提供されるマーキング インターフェイスであり、シリアル化できるクラスをマークするために使用されます。このインターフェイスを実装するクラスのみがシリアル化および逆シリアル化操作を実行できます。このインターフェイスはメソッドを実装しませんが、このクラスがシリアル化可能であることを JVM に伝えるマーカーとして機能します。

Java.io.Serializable インターフェースを実装するクラスは、次の条件を満たす必要があります:
1. クラスはシリアル化可能である必要があります、つまり、そのステータスをバイト ストリームに書き込むことができます。
2. このクラスにはパラメーターのないコンストラクターが必要です。
3. このクラスのすべての非静的メンバー変数はシリアル化可能である必要があります。

たとえば、次は Java.io.Serializable インターフェイスを実装するクラスの例です:

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. シリアル化の実装メソッド

Java 言語には 2 つのメソッドが用意されています。シリアル化実装メソッド: Java.io.ObjectOutputStream クラスおよび Java.io.ByteArrayOutputStream クラス。

  1. Java.io.ObjectOutputStream クラス

Java.io.ObjectOutputStream クラスは、Java 言語によって提供されるシリアル化クラスです。このクラスは、Java オブジェクトをバイトのストリームにシリアル化するメソッドと、これらのバイトを OutputStream に書き込む機能を提供します。以下は、Person オブジェクトをバイト ストリームにシリアル化し、それをファイルに書き込むメソッドの例です。

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 class

Java .io. ByteArrayOutputStream クラスは、シリアル化のために Java 言語によって提供されるクラスです。このクラスは、Java オブジェクトをバイト配列にシリアル化するメソッドと、これらのバイトを ByteArrayOutputStream に格納する機能を提供します。以下は、Person オブジェクトをバイト ストリームにシリアル化し、それをバイト配列に格納するメソッドの例です:

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

4. 逆シリアル化の実装メソッド

Java 言語には 2 つの逆シリアル化が用意されています。実装メソッド: Java.io.ObjectInputStream クラスおよび Java.io.ByteArrayInputStream クラス。

  1. Java.io.ObjectInputStream クラス

Java.io.ObjectInputStream クラスは、Java 言語によって提供される逆シリアル化クラスです。このクラスは、InputStream からバイトを読み取り、Java オブジェクトに逆シリアル化するメソッドを提供します。以下は、ファイルからバイト ストリームを読み取り、それを Person オブジェクトに逆シリアル化するメソッドの例です。

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 class

Java io.ByteArrayInputStream クラスは、逆シリアル化のために Java 言語によって提供されるクラスです。このクラスは、バイト配列からバイトを読み取り、Java オブジェクトに逆シリアル化するメソッドを提供します。以下は、バイト配列を Person オブジェクトに逆シリアル化するメソッドの例です。

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

つまり、Java 言語のシリアル化関数と逆シリアル化関数は、オブジェクトをさまざまな形式に簡単に変換できる非常に重要な関数です。 JVM に転送または保存します。シリアル化と逆シリアル化は、Java.io.Serializable インターフェイスを実装し、Java.io.ObjectOutputStream クラスと Java.io.ObjectInputStream クラスを使用することによって実現されます。同時に、Java.io.ByteArrayOutputStream クラスと Java.io.ByteArrayInputStream クラスでもこれらの操作を実装できます。

以上がJava言語でのシリアライズとデシリアライズの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。