java - 无法序列化 ArrayList

标签 java class serialization collections arraylist

这是 Serializing a vector 的后续内容

我正在尝试为我正在开发的游戏实现加载和保存。

我想保存一个 Maze,其中包含 EntityArrayList 等属性。

实体是龙、英雄和元素的父类(super class)。所有这三种类型都可以同时包含在 vector 中。

使用“自动”序列化机制(将 implements Serialized 添加到 Maze)可以保存除 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;
    }

}

最佳答案

Entity 也可以序列化吗? (您提到只有 Maze 是可序列化的)。

并确保列表未定义为 transient 静态,否则序列化机制将跳过它。

关于java - 无法序列化 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367916/

相关文章:

java - 无法使用 SDK 打开 Facebook session

java - 使用JSP、servlet和ajax上传文件而不设置表单的action属性

c# - 在两个命名空间中使用相同的类名 - 优先考虑其中之一

java - 验证文件名

c++ - 使用析构函数删除成员 vector 中的堆分配对象

objective-c - 在类方法中使用 self

c# - 序列化/反序列化后使用的ram大小异常增加

xml - 删除 boost xml 序列化的版本控制

java - 深度反射(reflection)比较等于

Java Swing : System-wide components scale?