ゲームなどでセーブデータを管理するためのオブジェクトのひな形を作りました。
Serializableインターフェースの使い方の実例になると思います。
SaveData.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SaveData implements Serializable{
private static final long serialVersionUID = 9221767827371311543L;
public String name;
public int number;
public InnerObject obj;
public static class InnerObject implements Serializable {
private static final long serialVersionUID = 6103171382897938196L;
public int a;
public int b;
}
public void save(String filepath)
throws FileNotFoundException, IOException {
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream(filepath));
os.writeObject(this);
os.close();
}
public static SaveData load(String filepath)
throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream is = new ObjectInputStream(
new FileInputStream(filepath));
SaveData instance = (SaveData) is.readObject();
is.close();
return instance;
}
public static void main(String[] args) {
SaveData data;
try {
data = SaveData.load("save.dat");
} catch (Exception e) {
data = new SaveData();
data.name = "abc";
data.number = 0;
data.obj = new SaveData.InnerObject();
data.obj.a = 10;
data.obj.b = 20;
}
data.number = data.number + 1;
System.out.println(data.name);
System.out.println(data.number);
System.out.println(data.obj.a);
System.out.println(data.obj.b);
try {
data.save("save.dat");
} catch (IOException e) {
e.printStackTrace();
}
}
}
データが保存されるので、data.numberの値は実行するたびに1ずつ増えていきます。
mainを見ていただくとわかるように、
saveメソッドで保存し、
loadメソッド(生成のクラスメソッド)で復元します。
バイナリエディタで中身を見て見ると・・・
暗号化などの処理はしていないので、興味があれば研究してみてください。
参考URL
保存・読み込み処理は、保存する(ゲーム状態の復元に必要な)パラメータが追加されたら、すぐにそれを保存・読み込めるように実装します。これを怠って後でまとめて実装しようとすると、複雑になって実装が難しくなります……。また、保存・読み込みの機能を常に使用可能な状態にしておくと、何か問題が起きたときの再現・テスト・動作確認が、素早く簡単にできるようになります。
なので、 保存・読み込みは、いつでも使えるように、しっかりメンテナンスしておきましょう。