2

我想知道是否有一种简单的方法可以保存对象数组,而不必遍历并保存对象的各个方面。在我的示例中,我有两个数组,一个是单个数组,另一个是二维数组,其中包含引用自定义类的对象。每个对象都有特定的细节,如 x 和 y 整数、布尔值、字符串等。附加到它们(块[0].x,块[0].canWalk,块[0].name),我想知道是否有一种简单的方法可以将这些数组保存到文件中而不必使用for循环和保存每个部分。多维数组只是一个与第一个相同的已保存数组的数组 (savedBlock[0][0].x ...)

到目前为止我所拥有的(抛出 NotSerializableException):

public class Save
{
    static File f;
    static ObjectOutputStream os;
    public static void openFile()
    {
        try
        {
            if(!new File("c:\\IDsGame").exists())
            {
                new File("c:\\IDsGame").mkdirs();
            }

            f = new File("c:\\IDsGame\\data.bin");
            os = new ObjectOutputStream(new FileOutputStream(f));

            writeFile();
        }
        catch(Exception e)
        {
            System.err.println("creating file");
        }
    }

    public static void writeFile()
    {
        try
        {
            ArrayList<Object> map = new ArrayList<Object>(Arrays.asList(Map.block));
            ArrayList<Object> savedMaps = new ArrayList<Object>(Arrays.asList(Map.savedMaps));
            os.writeObject(map);
            os.writeObject(savedMaps);
            os.close();
        }
        catch (IOException e) {System.out.println(e);}

    }
}

在我的地图类中,我初始化了块 (Blocks[]) 和 savedMaps(Blocks[][])。我的 Blocks 课程包含以下内容:

public class Blocks implements Serializable
{
    public boolean canWalk, onTop, itemTaken;
    public Image img = null, imgBack = null;
    public final Image (a ton of different images)
    public String name, item, message, title;
    public char initMap, initEx, initIt;
    public int x, y, height, width;

    public Blocks()
    {
        canWalk = true;
        onTop = false;
        itemTaken = false;
        img = null;
        name = null;
        item = null;
        message = null;
        x = 0;
        y = 0;
        height = 0;
        width = 0;
    }
}

显然,我在 Map 类中更改了某些部分不同的数组,我想知道是否有任何更简单的方法(根本)来保存块对象的数组。

感谢您抽出宝贵时间提供帮助,如果您需要更具体的信息,请告诉我。

ID

4

2 回答 2

0

图像不可序列化,因此当 Blocks 类被序列化时,您会收到 NotSerializableException。ImageIcon 可以序列化,因此在 ImageIcons 中包装 Image 实例将解决该问题。

public class Blocks implements Serializable
{
    public boolean canWalk, onTop, itemTaken;
    public ImageIcon img = null, imgBack = null;
    public final ImageIcon (a ton of different images)
    public String name, item, message, title;
    public char initMap, initEx, initIt;
    public int x, y, height, width;

    public Blocks()
    {
        canWalk = true;
        onTop = false;
        itemTaken = false;
        img = null;
        // img = new ImageIcon(someImageInstance)
        name = null;
        item = null;
        message = null;
        x = 0;
        y = 0;
        height = 0;
        width = 0;
    }
}
于 2012-06-10T05:49:06.607 回答
0

仅仅实现一个类Serializable是不够的:所有的字段都必须是Serializable

你的Block班级可能有问题。所有常见的 java 类都有Serializable,而且Block也有类型的字段Image。如果Image不是Serializable,则尝试序列化Block将抛出NotSerializableException.

于 2012-06-10T06:18:55.800 回答