将项添加到文件中的序列化列表

时间:2015-09-08 09:20:24

标签: java serialization

我有一个ArrayList Serializable,我可以序列化,然后从文件中保存并加载它。但是如果我想在没有加载整个列表的情况下向arraylist添加一个对象,然后再次保存整个内容呢?我不想加载整个列表,然后添加一个对象,然后再次保存,因为它会影响我的表现。

这是我为保存和加载文件而制作的两种方法。 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();
    }

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

2 个答案:

答案 0 :(得分:1)

或者:

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

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

答案 1 :(得分:1)

为什么不使用SQLite database?它是Java支持的轻量级本地(存储在文件中)数据库。您使用它的方式与使用通用数据库相同。

请查看此处的教程:http://www.tutorialspoint.com/sqlite/sqlite_java.htm

如果您不想使用数据库,我会看到两种方法来解决您的问题:

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