我正在创建一个游戏,其中“块”的所有位置都存储在变量block_area
中 - 一个类Area
的对象。我的游戏已经运行了一个星期了,我已经决定实现一个保存和加载功能,我将block_area
保存到文件Drifter
,我的代码为:
Area block_area; // Later initialized
void saveArea()
{
try
{
FileOutputStream fos = new FileOutputStream(savefile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(block_area);
oos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
void loadArea()
{
try
{
FileInputStream fis = new FileInputStream(savefile);
ObjectInputStream ois = new ObjectInputStream(fis);
block_area = (Area)ois.readObject();
ois.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
但是,这是我第一次写一个OBJECT到一个文件,所以我不太了解它。当我尝试将对象保存到文件时,它给了我这个错误:
java.io.NotSerializableException: java.awt.geom.Area
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at Drifter.saveArea(Drifter.java:58)
at Drifter.keyPressed(Drifter.java:315)
...
如果有人能告诉我如何用文件编写和阅读对象,将非常感谢帮助。
Area
object to a file and read it?我还有一些后续问题:
ObjectInputStream
是最好的行动方案吗?我看过一些人们推荐使用XML
和JSON
的答案,但是我永远无法找到时间来了解它们,并且更愿意坚持使用纯Java方法(没有任何第三方工具)编辑 - 我还应该提到我的班级实现Serializable
唯一的例外是非常自我解释的NotSerializableException: java.awt.geom.Area
。要序列化的任何对象都必须实现Serializable
接口。 java,awt.geom.Area
没有。该类的任何属性还必须实现Serializable,原始或定义为瞬态。
我建议找出一种方法将Area读入一个实现Serializable
的对象。当您将其读回时,可以构造一个新的Area对象。这可能是评论中提到的JSON/XML method所做的。人类可读存储格式的附加好处是您可以在文本编辑器中编辑它。您将无法使用序列化对象的二进制输出执行此操作。