如何将多个可序列化对象写入单个文件,然后在需要时读取一些对象?
答案 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;
}
}