【发布时间】:2019-07-23 03:54:58
【问题描述】:
我正在创建一个游戏,其中“块”的所有位置都存储在变量 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)
...
如果有人能告诉我如何使用文件写入和读取对象,我们将不胜感激。
TL;DR 如何将Area 对象的内容写入文件并读取它?
另外我有几个后续问题:
-
ObjectInputStream是最好的做法吗?我看过一些人们推荐使用XML和JSON的答案,但我永远找不到时间来了解它们,并且更愿意坚持使用纯Java 方法(没有任何第三方工具)李> - 是否有任何其他方法可以将对象的信息保存到外部源,而不是文件处理?
编辑 - 我还应该提到我的班级实现了Serializable
【问题讨论】:
-
“人们推荐使用 XML .. 但我 .. 更愿意坚持纯 Java 方法” J2SE 具有对读取和写入 XML 的内置支持。另见How to serialize Java 2D Shape objects as XML?
-
@Andrew Thompson 问题是,我对 XML 一无所知,虽然我通常有心情学习新东西,但这是一个简单的副项目,我不想投资时间太长了
-
“我不想在上面投入太多时间”我可以理解这一点。继续前进..
标签: java awt objectinputstream objectoutputstream