我正在尝试为我正在制作的游戏实施加载和保存。
我想要保存的是:
char[][]
(二维数组/矩阵)ArrayList<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()
)。
这可能是什么原因?
答案 0 :(得分:3)
如果您希望整个结构可序列化,那么您还需要使部件可串行化。这在实践中意味着你需要让你的Dragon,Hero和Item类实现Serializable。它只是一个标记界面,因此您只需添加implements Serializable
。一些ides(至少是eclipse)可能会抱怨你应该添加一个private long SerialVersionUID
,它可能会或者可能不会优化序列化 - 无论如何它并不是绝对必要的。
此要求是递归的 - 任何自定义或不可序列化对象的子部分也必须要处理,例如,如果您的Item类看起来像这样
public class Item implements Serializable {
private String s;
private MyClass c;
..
然后你还需要制作MyClass Serializable,它的任何实例变量等等。
答案 1 :(得分:2)
我没有看到Dragon,Item和Hero的特定序列化方法的任何原因,除非你需要一些非常特殊的东西,默认序列化机制无法处理。 (当然这些类需要像Steve B所提到的那样可序列化)
你已经有很多代码,所以我怀疑你已经运行了一些测试。你遇到过某些问题吗?或者你是怎么回事?
<强>更新强>
我注意到您的代码中的某些方面与您的问题没有直接关系,但无论如何您可能对此感兴趣: