Javaでオブジェクトをシリアライズ・デシリアライズする方法をわかりやすく解説
Javaにおけるシリアライズ(直列化)とは、オブジェクトの状態をバイトストリームへと変換するプロセスのことです。オブジェクトがシリアライズ可能になるためには、そのクラスまたは親クラスがSerializableインターフェース、もしくはExternalizableインターフェースを実装している必要があります。一方、デシリアライズとは、シリアライズされたデータを再びオブジェクトのコピーとして復元するプロセスを指します。
transientキーワードの役割
シリアライズの際に、特定の変数の状態をバイトストリームに書き込みたくない場合は、transientキーワードを使用します。JVMはtransientキーワードを検出すると、その変数の元の値を無視し、該当するデータ型のデフォルト値を保存します。例えば、int型なら0、byte型なら0、float型なら0.0といった具合です。
オブジェクトのシリアライズは、FileOutputStreamクラスとObjectOutputStreamクラスを組み合わせることで実現できます。
サンプルコード
import java.io.*;
public class SerializationTest implements Serializable {
int a = 1, b = 2;
transient int c = 3;
public static void main(String[] args) throws Exception {
SerializationTest obj = new SerializationTest();
// シリアライズ
FileOutputStream fos = new FileOutputStream("serialization.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
// デシリアライズ
FileInputStream fis = new FileInputStream("serialization.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
SerializationTest test = (SerializationTest)ois.readObject();
System.out.println("a = " + test.a);
System.out.println("b = " + test.b);
System.out.println("c = " + test.c);
}
}
実行結果
a = 1 b = 2 c = 0
コードの解説
このプログラムでは、まずSerializationTestオブジェクトを生成し、「serialization.txt」というファイルに対してシリアライズを行っています。その後、同じファイルからデータを読み込んでデシリアライズし、各フィールドの値を出力しています。
実行結果に注目すると、通常のフィールドであるaとbは元の値(1と2)が正しく保持されている一方で、transient修飾子が付与されたcはデフォルト値の0が出力されています。これは、transientキーワードが付いた変数がシリアライズの対象から除外され、復元時にはデータ型ごとの初期値が設定されるためです。パスワードや一時的な計算結果など、永続化したくない情報を持つフィールドにtransientを活用することで、セキュリティやパフォーマンスの面でメリットが得られます。
-
Javaの例外(Exception)とは?基本概念から例外処理の方法まで徹底解説
Java開発者にとって、Javaの例外と例外処理に関する知識は必須です。 本チュートリアルでは、Javaプログラミングにおいてすべてのエンジニアが押さえておくべき基礎知識を解説します。まずは「Javaの例外とは何か」というところから始めましょう。 Javaの例外とは Javaプログラムは、実行中に何らかの問題に遭遇し、突如として強制終了することがあります。このような問題を例外(Exception)と呼びます。 優れたプログラマーは、実行時に発生し得るエラーを予測し、例外が起きた場合でもプログラムが別の経路で動作を継続できるように設計します。このような実践が例外処理(Exception Hand
-
JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)
このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの2つを使って解説します。 サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。 Person.java import java.util.List; import java.util.Map; public class Person { String name; Integer age;