将许多java对象写入单个文件

时间:2010-08-12 17:00:03

标签: java serialization

如何将多个可序列化对象写入单个文件,然后在需要时读取一些对象?

5 个答案:

答案 0 :(得分:7)

您必须自己实现索引方面,否则可以这样做。序列化对象时,基本上会返回OutputStream,您可以指向任何您想要的位置。以这种方式将多个对象存储到文件中会很简单。

当您想要阅读“一些”物品时,很难实现。你怎么知道如何寻找包含你想要的特定对象的文件中的位置?如果你总是按照你编写它们的顺序读取对象,那么从文件开头开始,这不会有问题。但是如果你想随机访问流的“中间”中的对象,你将不得不想出一些方法来确定你感兴趣的特定对象的字节偏移量。

(这种方法与同步甚至Java本身无关;你必须设计一个符合你的要求和环境的方案。)

答案 1 :(得分:3)

写作部分很简单。你只需要记住你必须“立刻”写下所有对象。您无法使用序列化对象创建文件,将其关闭并再次打开以附加更多对象。如果你试试,你会在阅读时收到错误信息。

对于反序列化,我认为你必须处理完整的文件并保留你感兴趣的对象。其他的将被创建,但下一次由gc收集。

答案 2 :(得分:2)

使Object[]用于存储您的对象。它对我有用。

答案 3 :(得分:0)

我使用Flat File Database(例如Berkeley DB Java Edition)。只需将节点编写为表中的行,如:

Node
----
id
value
parent_id

答案 4 :(得分:0)

要从文件中读取更多对象:


public class ReadObjectFromFile {

    public static Object[] readObject() throws IOException {
        Object[] list = null;

        try {
            byte[] bytes = Files.readAllBytes(Paths.get("src/objectFile.txt"));
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
            list = (Object[]) ois.readObject();
            ois.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }
}