這是一個後續到Serializing a vector無法序列化一個ArrayList
我試圖實現加載和保存的遊戲我的工作。
我想保存Maze
,其中包含ArrayList
的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」。 – aroth 2011-03-20 10:43:03