【问题标题】:Serialize an ArrayList containing ArrayLists?序列化包含 ArrayLists 的 ArrayList?
【发布时间】:2014-01-18 11:30:55
【问题描述】:

在 android 应用程序中,我需要将一些数据保存到 A 类型对象的 ArrayList 中的文件中。ArrayList 中的 A 类型对象由标准原始对象组成,除了每个 A 对象还包含对象的 ArrayList B型。

B 对象也由原始数据类型组成。此时,A 类和 B 类都没有实现 Serializable 的特定代码。

我的问题是我应该如何将这些数据写入文件。我需要添加特定的支持来序列化这些对象吗?我怀疑不是因为它们只包含原始数据类型,但我怀疑我需要这样做,因为 ArrayList 本身不是原始类型。

非常感谢您的指导。我想做最简单的事情。我知道我可以编写自己的 JSONSerializer 代码来手动序列化 A 类中的每个字段,并从 B 类调用 JSON 序列化器代码来序列化 ArrayList 项,并将其全部填充到一个文件中。我也对通过 SQLLite 运行这一切不感兴趣。

虽然我找到了很多关于序列化数组列表的帖子,但我没有找到嵌套数组列表的帖子。提前感谢您的帮助。

【问题讨论】:

    标签: android serialization arraylist


    【解决方案1】:

    使用 ObjectInputStream 和 ObjectOutputStream,类似:

    public static void saveArrayListToFile(ArrayList<Book> books, String filePath)
    {
        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filePath)));
        oos.writeObject(books);
        oos.close();
    }
    
    // ...
    
    public static ArrayList<Book> loadArrayListFromFile(String filePath)
    {
        ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePath)));
        try
        {
            return (ArrayList<Book>) ois.readObject();
        }
        finally
        {
            ois.close();
        }
    }
    

    注意 Book 类必须实现 Serializable 接口。我没有测试代码,但它应该可以工作。您可能需要尝试捕获上述代码中的任何异常。

    【讨论】:

    • 谢谢。是的,使 Book seializable 工作。在我的情况下,虽然 Book 在其中有另一个 ArrayList 例如,所以我必须将可序列化属性添加到类 Chapters 中。顺便说一句,您的代码存根在 ois.readObject 调用中确实对我有问题,我不得不抑制编译器发出的“类型安全:未经检查的从 Object 转换为 ArrayList”警告 - 但是代码工作得很好而且很花哨。我会投票给你们,但我的代表需要在我投票之前上升!
    【解决方案2】:

    如果你想使用Serializable,你应该没有问题,因为ArrayList是Serializable。只需确保您的非原始对象也是可序列化的。

    【讨论】:

    • 谢谢!我所要做的就是使对象 A 可序列化,然后获取对象在对象 A 内的数组列表中的类,并使它们的类可序列化,这一切都起作用了。作为一个 Java 新手,令人困惑的是,我没有意识到“使类可序列化”仅意味着将“实现可序列化”语法添加到类声明中,并将所需的 versionID 添加到类中。我的印象是我必须编写一些代码来进行序列化本身。非常感谢!
    猜你喜欢
    • 2014-07-02
    • 2012-06-14
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2011-09-05
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多