talosのプログラミング教室

Java Gold合格への道 ~Java I/O・オブジェクトの直列化と復元~

スポンサーリンク

こんにちは。たろすです。

今回はJava I/Oのオブジェクトの直列化と復元について説明します。

直列化はなんのために行う?

そもそも直列化とはなにかというと、オブジェクトをバイト列として一列に並べることです。

そうすることによって、アプリケーションが終了してもオブジェクトを保存しておいて、再度アプリケーションが起動したときにオブジェクトを復元できます。

また、直列化されたオブジェクトはネットワーク上で送信することもできます。

直列化

直列化はwriteObjectメソッドによって行います。

直列化したいオブジェクトにはSerializableインタフェースを実装します。

public class Data implements Serializable {

	private int id;
	private int num;

	public Data(int id, int num) {
		this.id = id;
		this.num = num;
	}

	public String toString() {
		return id + ":" + num;
	}

        // setter & getter
}
Data outData = new Data(1, 5);

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("sample.ser"))) {
	oos.writeObject(outData);
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}

復元

復元はreadObjectメソッドを使って行います。

戻り値はオブジェクト型なので元の型にキャストします。

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("sample.ser"))) {
	Data inData = (Data) ois.readObject();
	System.out.println(inData);
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} catch (ClassNotFoundException e) {
	e.printStackTrace();
}
1:5

おわりに

今回はJava I/Oのオブジェクトの直列化と復元について説明しました。