Java でのシリアル化と逆シリアル化

王林
リリース: 2023-06-08 08:01:09
オリジナル
1816 人が閲覧しました

Java におけるシリアル化と逆シリアル化

シリアル化とは、オブジェクトの状態をバイト ストリームに変換して、ネットワーク経由で送信したり、ディスクに永続的に保存したりできるようにするプロセスを指します。逆シリアル化は、シリアル化されたバイト ストリームをオブジェクトに復元するプロセスです。 Java では、シリアル化と逆シリアル化は ObjectInputStream と ObjectOutputStream を通じて実装されます。

なぜシリアル化が必要なのでしょうか?

最新のアプリケーションでは、オブジェクトの状態を異なるシステム、プロセス、スレッド間で転送する必要があることがよくあります。たとえば、分散システムでは、オブジェクトを異なるサーバー間で転送する必要がある場合があります。別の例として、オブジェクトをキャッシュに保存する場合、オブジェクトをディスクに保存できるようにシリアル化する必要があります。

Java でのシリアル化

Java は、シリアル化を実装するための Serializable インターフェイスを提供します。 Serializable インターフェイスはメソッドを持たない単なるマーカー インターフェイスであり、このクラスがシリアル化可能であることをコンパイラーに伝えるだけです。クラスが Serializable インターフェイスを実装している場合、そのクラスのオブジェクトはシリアル化できます。例:

public class Person implements Serializable {
  private static final long serialVersionUID = 1L;
  private String name;
  private int age;

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

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }
}
ログイン後にコピー

上記の例では、Person クラスは Serializable インターフェイスを実装し、クラスがシリアル化できることを示しています。

Java での逆シリアル化

Java での逆シリアル化は、シリアル化されたバイト ストリームをオブジェクトに復元するプロセスです。逆シリアル化は、ObjectInputStream クラスを使用して実装できます。例:

try {
  FileInputStream fileIn = new FileInputStream("person.ser");
  ObjectInputStream in = new ObjectInputStream(fileIn);
  Person person = (Person) in.readObject();
  in.close();
  fileIn.close();
} catch (IOException i) {
  i.printStackTrace();
} catch (ClassNotFoundException c) {
  c.printStackTrace();
}
ログイン後にコピー

上の例では、まず FileInputStream オブジェクトを作成し、それを ObjectInputStream コンストラクターに渡して ObjectInputStream オブジェクトを作成します。その後、readObject() メソッドを使用して ObjectInputStream からオブジェクトを読み取ります。最後に、ObjectInputStream と FileInputStream を閉じます。

逆シリアル化する場合、シリアル化されたクラスが存在する必要があることに注意してください。シリアル化されたクラスが存在しない場合は、ClassNotFoundException 例外がスローされます。

Java におけるシリアル化と逆シリアル化は非常に重要であり、異なるシステム、プロセス、スレッド間でオブジェクトの受け渡しを可能にします。同時に、Java は、transient、writeObject()、readObject() メソッドなど、オブジェクトのシリアル化と逆シリアル化の動作を制御するいくつかのメソッドも提供します。シリアル化と逆シリアル化はパフォーマンスに大きな影響を与えるため、必要に応じて使用を避ける必要があります。

以上がJava でのシリアル化と逆シリアル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート