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 サイトの他の関連記事を参照してください。