【发布时间】:2011-03-20 00:35:02
【问题描述】:
我正在尝试为我正在开发的游戏实现加载和保存。
我要保存的是:
- 一个
char[][](二维数组/矩阵) -
ArrayList<Entity>
Entity 是 Dragon、Hero 和 Item 的超类。所有这三种类型都可以同时包含在 ArrayList 中。
到目前为止,我有这个:
package logic;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public final class LoadAndSave {
public static final transient boolean available = false;
public static final boolean serialize(Object obj) {
// Write to disk with FileOutputStream
FileOutputStream saveFile;
try {
saveFile = new FileOutputStream("game.sav");
} catch (FileNotFoundException e) {
return false;
}
// Write object with ObjectOutputStream
ObjectOutputStream objOut;
try {
objOut = new ObjectOutputStream(saveFile);
} catch (IOException e) {
//
return false;
}
// Write object out to disk
try {
objOut.writeObject(obj);
} catch (IOException e) {
return false;
}
return true;
}
public static final Object load() {
FileInputStream fileIn;
try {
fileIn = new FileInputStream("game.sav");
} catch (FileNotFoundException e1) {
return null;
}
// Read object using ObjectInputStream
ObjectInputStream objIn;
try {
objIn = new ObjectInputStream(fileIn);
} catch (IOException e) {
return null;
}
// Read an object
Object obj;
try {
obj = objIn.readObject();
} catch (IOException e) {
return null;
} catch (ClassNotFoundException e) {
return null;
}
return obj;
}
}
我认为代码是不言自明的。现在回答我的问题:
- 此代码是否足够?
- 是否需要为
Dragon、Item和Hero实现特定的序列化方法? - 序列化机制将如何处理我有一个
Entity向量,其中包含的类型不是Entity,而是派生类? 感谢您的宝贵时间!
好的,一切似乎都很好,除了ArrayList 之一。它要么没有被保存或加载(null pointer exception 调用 size() 时)。
这可能是什么原因?
【问题讨论】:
-
这很容易验证自己 - 只需序列化和反序列化您的对象并将字段值与原始值进行比较。
标签: java class serialization collections vector