Bits of Java (トップ)

目次  前へ  次へ

直列化してファイルに出力

Book オブジェクトを直列化してカレントディレクトリに data というファイル名で出力するプログラムです。 例外を一つずつ catch しているので長くなっていますがファイルへ出力する ObjectOutputStream オブジェクトを作成したら直列化は下の1行のみです。

out.writeObject(book);
あとはストリームを flush するだけで Book オブジェクトに復元可能なファイルが作成されます。

/********************* SerializationSample.java *********************/
import java.io.*;

public class SerializationSample {
    public static void main(String[] args) {
        Book book = new Book("きまぐれロボット", "星新一");
        ObjectOutputStream out = null;
        try {
            out = new ObjectOutputStream(new BufferedOutputStream(
                                         new FileOutputStream("data")));
            //このメソッドでファイルに直列化
            out.writeObject(book);
            out.flush();

        } catch (InvalidClassException e) {
            //(java.io.ObjectStreamExceptionのサブクラス)
            //直列化で使用されるクラスになんらかの不具合があった場合
            System.out.println("直列化に失敗 - " + e);

        } catch (NotSerializableException e) {
            //(java.io.ObjectStreamExceptionのサブクラス)
            //直列化の対象が java.io.Serializableを実装していない場合
            System.out.println("直列化に失敗 - " + e);

        } catch (IOException e) {
            //基本となる OutputStream が例外をスローした場合
            System.out.println("直列化に失敗 - " + e);

        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {}
            }
        }
    }
}


/**************************** Book.java ****************************/
public class Book implements java.io.Serializable {
    protected String title;
    protected String author;

    public Book() {}

    public Book(String title, String author) {
        this.title  = title;
        this.author = author;
    }
//--------------------------------------------------------------------
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
//--------------------------------------------------------------------
    public String toString() {
        return "Book title:" + title + "  author:" + author;
    }
}