【发布时间】:2011-07-19 01:59:39
【问题描述】:
这是Serializing a vector的后续行动
我正在尝试为我正在开发的游戏实现加载和保存。
我想保存一个Maze,其中包含ArrayList 和Entity 等属性。
Entity 是 Dragon、Hero 和 Item 的超类。所有这三种类型都可以同时包含在向量中。
使用“自动”序列化机制(将implements Serializable 添加到Maze)保存除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;
}
}
【问题讨论】:
-
愚蠢的问题,但是您是否也将
implements Serializable添加到Entity?对于要序列化的列表,列表中的所有对象(以及所有对象中的所有非原始字段)都必须实现Serializable。
标签: java class serialization collections arraylist