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

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

JavaのObjectをファイルに書き込む

ついでに今日2つ目の記事だけどJavaのObjectをシリアライズ化してファイルに書き込む方法。
なんかシリアライズ化なる奴があることを今日知った。どっかのサイトを読んだ限りこれはオブジェクトを直列化・・・つまりデータの列とすることでこのデータをファイルに書き込むなりネットワーク越しに何処かに送るなりして後から再びObjectに戻すということが可能なようだ。
こんな理解であってるんだろうか。まあいいや。とりあえずオブジェクトをシリアライズ化するにはあるインターフェースを実装してやればいいらしい。

import java.io.Serializable;

class AppData implements Serializable{
     private String str;
     public void setString(String s){
         str = s;
     }
     public String getString(){
         return str;
     }
}

とか適当なクラスを作ってみる。こんな具合にSerializableなるインターフェースを実装すればいいようだ。

これをファイルに書き込む。あ、ちなみに必要なimportとかpackageとか省略してある。

public class Hello{
    public static void main(String[] argv){
        AppData data = new AppData();
        data.setString("HelloWorld");
        
        try{
            FileOutputStream fos = new FileOutputStream("/path/to/objfile");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(data);
            oos.close();
            fos.close();
        }catch(Exception e){}//例外は手抜き
        data = null;
        /*
        ここまでの処理でうまくいってればAppDataのdataオブジェクトが/path/to/objfileにファイル化できてるはず。
        この下のtryの中で読みだしてみる。
        */
        
        try{
            FileInputStream fis = new FileInputStream("/path/to/objfile");
            ObjectInputStream ois = new ObjectInputStream(fis);
            data = (AppData)ois.readObject();
            ois.close();
            fis.close();
        }catch(Exception e){}//やっぱり例外は手抜き。
        System.out.println(data.getString());//-> HelloWorld
    }
}

こんな感じ?
なんかRubyならもっと簡単にできたきがする。まあいいや。javaでもこういうことができるようだ。

ちなみにAndroidのActivity切り替え時に渡せるオブジェクトはStringとかintとかの変数はもちろん渡せるんだけど、そうじゃない独自のものの場合は必ずシリアライズ化できるオブジェクトである必要が有るようだ。
なので、Activityに独自オブジェクトを渡したいときはSerializableインターフェースを実装しないといけない。
ということを今日初めて知ったorz

Firefox ブラウザ無料ダウンロード