読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Javaでシリアライズ、デシリアライズするサンプル

<スポンサーリンク>

シリアライズとは、オブジェクトをどこかに書き込む処理のことをいう。
シリアライズされたオブジェクトを読み取ってプログラム中に戻す処理をシリアライズという。

シリアライズの目的は、オブジェクトの状態を保存すること。そして、後でその状態を復元することだえる。

入出力クラスを使えばオブジェクトの状態を保存し、あとで復元することもできるが、すべてのプログラマが独自のやり方で好き勝手やってたらエラーが起こりがちになってしまう。

だから、シリアライズ処理によって、オブジェクトの状態を保存する処理の標準化と自動化が行われ、その結果として、堅牢な処理を実現することが可能となった。
Javaのオブジェクトをシリアライズ可能にするには、そのクラスがjava.io.Serializableインターフェースを実装している必要がある。

適当なオブジェクトをシリアライズするサンプルを作ってみよう。

package example.serialize;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Person implements Serializable {
	private String name;
	private int 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;
	}

	public void serializeObject(String path) {
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		try {
			fos = new FileOutputStream(new File(path));
			oos = new ObjectOutputStream(fos);
			oos.writeObject(this);
			System.out.println("シリアライズ完了");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {

				}
			}
		}
	}
}

で、こいつを使うMainクラスはこんな感じ。

package example.serialize;

public class Main {
	public static void main(String[] args) {
		Person me = new Person();
		me.setName("programming10000");
		me.setAge(28);
		me.serializeObject("C:\\tmp\\myObj.obj");
	}
}

これを実行すると、結果は以下のように表示され、

シリアライズ完了

C:\tmp\myObj.obj
というファイルが作成される。

では、今度はここで作ったファイルをデシリアライズしてみよう。

package example.serialize;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class Main {
	public static void main(String[] args) {
		FileInputStream fis = null;
		ObjectInputStream ois = null;
		try {
			fis = new FileInputStream(new File("C:\\tmp\\myObj.obj"));
			ois = new ObjectInputStream(fis);
			Person me = (Person)ois.readObject();
			System.out.println("デシリアライズ完了");
			System.out.println("名前は・・・" + me.getName());
			System.out.println("年齢は・・・" + me.getAge());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ois != null) {
				try {
					ois.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
 	}
}

実行すると、結果はこうなる。

デシリアライズ完了
名前は・・・programming10000
年齢は・・・28

さっきセットしたプロパティごと復元されたことがわかる。

参考にした本

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

Javaの基礎中の基礎が丁寧に解説されている本。
何回も読んだからボロボロになってしまった。