【问题标题】:Add item to serialized list in a file将项目添加到文件中的序列化列表
【发布时间】:2015-09-08 09:20:24
【问题描述】:

我有一个SerializableArrayList,我可以对其进行序列化,然后从文件中保存和加载它。但是,如果我想在数组列表中添加一个对象,而不加载整个列表,然后再次保存整个列表,该怎么办?我不想加载整个列表,然后向其中添加一个对象,然后再次保存它,因为它会影响我的性能。

这是我为保存和加载文件所做的两种方法。 Deck 类当然实现了Serializable

public static List<Deck> loadDeckDatabase() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("decks");
        ObjectInputStream ois = new ObjectInputStream(fis);
        List decList = (List) ois.readObject();
        ois.close();
        return decList;
    }

public static void saveDeckDatabase(List<Deck> decks) throws IOException, ClassNotFoundException {
        FileOutputStream fos = new FileOutputStream("decks");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(decks);
        oos.close();
    }

我希望有人可以帮助我。谢谢!

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    要么:

    • 你必须加载和保存,因为你不知道Deck是如何序列化的。
    • 您可以编写自己的序列化,以便真正知道如何追加。

    另见此处: https://stackoverflow.com/a/7290812/461499

    【讨论】:

    • 我一直在考虑编写自己的方式来保存和加载数据库。保存和加载不是一种选择,因为 ArrayList 可以轻松包含 3,000 多个对象,保存时间太长了。
    • 另一种选择是使用类似数据库的结构。让你的卡组成为一个实体,这样你就可以使用方便的框架(如 hibenate)轻松加载、更改、添加等你的卡组
    • @Typischserg 是的,那也是一种序列化(虽然不是通过Serializable)。
    【解决方案2】:

    你为什么不直接使用SQLite database?它是 Java 支持的轻量级本地(仅存储在文件中)数据库。使用方式和普通数据库一样。

    看这里的教程:http://www.tutorialspoint.com/sqlite/sqlite_java.htm

    如果你不想使用数据库我看到了两种方法来处理你的问题:

    • 将每个数组对象保存在其他文件中,并在某个位置保存一个文件计数器 - 这不是非常优雅的解决方案,我猜它会增加 I/O 操作数
    • 将您的结构序列化为 JSON 并编写您自己的方法来添加元素。由于 JSON 的结构非常简单,因此只需使用 simple file and string operations 添加新元素似乎很容易

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多