【发布时间】:2012-11-27 21:11:02
【问题描述】:
我正在开发一个原始 RPG,这个类(据说)包含所有必要的数据:
public class CPU implements Serializable{
private Map<String, Location> locations;
private Map<String, Location> places;
private Map<String, NPC> npcs;
private Game game;
private Player player;
private NPC currentNPC;
public CPU(){
}
(我没有包括方法,但我认为这些现在无关紧要......)
“Game”类还包含作为变量的 Player 和 CPU,但它的构造函数并不是实际创建它们的构造函数(它们是在 main() 方法中创建的,然后添加到类中)。这个方法应该是把 CPU 类保存到一个文件中,以便我以后可以从中读取所有数据:
public void SaveGame(String s){
String sav = s;
sav.concat(".dat");
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(sav));
oos.writeObject(cpu);
oos.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
这是从文件中加载它的方法:
public void Load(String s){
if(s.contains(".dat")){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(s));
cpu = (CPU)ois.readObject();
ois.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
我的问题基本上是:这行得通吗?我是否能够简单地序列化 CPU 类并将其保存到文件中,然后将其读回并能够从中恢复所有数据(即播放器数据)?
如果我没记错的话,在Java中“=”并不意味着右边的对象会被复制,所以我的另一个问题是:当“Load”方法完成时,“cpu”(变量“游戏”类)仍然包含我从文件中加载的 CPU,我可以从中读取数据吗?
【问题讨论】:
-
如果其他类是可序列化的,它应该可以工作 e.i.游戏,玩家和NPC,但你为什么不试试呢?
-
你尝试的时候发生了什么?
-
关于你的最后一段:为什么加载的 CPU 实例会神奇地消失?在 Java 中,您基本上是在分配引用,只要您有某个对象的引用,它就不会被垃圾回收。
-
还没有尝试过,因为我已经工作了将近 10 个小时,并且我正在做一些别的事情...... ;)
标签: java file serialization