NotSerializableException with java.awt.geom.Area

NotSerializableException with java.awt.geom.Area,java,awt,objectinputstream,objectoutputstream,Java,Awt,Objectinputstream,Objectoutputstream,我正在创建一个游戏,其中“块”的所有位置都存储在变量block\u区域——一个类区域的对象。我的游戏已经正常运行一周了,我决定实施一个保存和加载功能,将块_区域保存到文件漂移者,并将其作为我的代码: Area block_area; // Later initialized void saveArea() { try { FileOutputStream fos = new FileOutputStream(savefile); ObjectOu

我正在创建一个游戏,其中“块”的所有位置都存储在变量
block\u区域
——一个类
区域的对象
。我的游戏已经正常运行一周了,我决定实施一个保存和加载功能,将
块_区域
保存到文件
漂移者
,并将其作为我的代码:

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();
    }
}
然而,这是我第一次在文件中写入和读取对象,所以我对它知之甚少。当我尝试将对象保存到文件时,它会出现以下错误:

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如何将
区域
对象的内容写入文件并读取? 另外我还有几个后续问题:

  • ObjectInputStream
    是这里的最佳行动方案吗?我看到了一些答案,其中有人建议使用
    XML
    JSON
    ,但我从来没有时间了解它们,我更愿意坚持使用纯Java方法(没有任何第三方工具)
  • 是否有其他方法可以将对象信息保存到外部源,以代替文件处理

EDIT-我还应该提到我的类实现了
Serializable

异常非常简单
notserializableeexception:java.awt.geom.Area
。要序列化的任何对象都必须实现
Serializable
接口<代码>java,awt.geom.Area没有。该类的任何属性也必须实现可序列化、原语或定义为瞬态


我建议要么找出一种方法,将区域读入一个实现了
Serializable
的对象。当您将其读回时,可以构造一个新的区域对象。这可能就是评论中提到的人正在做的事情。人类可读存储格式的附加好处是,您可以在文本编辑器中对其进行编辑。使用序列化对象的二进制输出,您将无法做到这一点。

“人们建议使用XML。但我更喜欢使用纯Java方法。”J2SE内置了对XML读写的支持。另请参见@Andrew Thompson问题是,我对XML一无所知,虽然我通常有心情学习新东西,但这是一个简单的附带项目,我不想在“我不想在这方面投入太多时间”上投入太多时间,我可以理解这一点。“我建议找出一种方法,将区域读入一个实现可序列化的对象中。”我意识到这一点,并尝试过让一个类
MA
扩展
Area
并实现
Serializable
,但没有用。至于可读性部分,这是不必要的,因为
block_area
几乎是随机生成的,阅读它对我没有任何用处,但是,在你写这篇文章的时候,我给了+1,这可能是我的错,因为我现在懒得学习JSOn之类的新东西:)看看这个: