我有一个可序列化对象的列表,我想将其存储在主节点的文件中。文件是我唯一可以用来存储数据的东西。有多个直接访问文件的从属节点只想读取列表的一部分,然后处理数据。集合中的对象是可序列化的,但不强制序列化它们。
主节点
Collection<SerializableObject> l = getSerializableCollection();
writeDataToFile(l)
从属节点
int id = getSlaveNodeID();
int leftIndex, rightIndex = getSliceOfArrayForSlaveNode(id)
Collection<SerializableObjects> l = readSliceOfArrayFromFile(leftIndex, rightIndex);
performComputationOnArraySlice(l);
如何(如果可能(在内存中仅读取该数组的一部分?我不想在每个从属节点的内存中读取整个数组,因为文件大小很大,而且从属节点必须只处理数组中从 leftIndex 到 rightIndex 的切片。
好的,我可以给你一个提示,但不能提供一个可行的解决方案。
- 首先,您应该考虑使用自定义输出格式而不是序列化。 当您有一个状态或没有那么多要存储的数据时,它工作得很好,但是如果你 正在处理大型数据集,我强烈建议您编写自己的文件格式。
- 其次,使用文件格式允许您定义自定义读取函数,您可以在其中逐行处理保存,并将整个数据集的一小部分仅保留在内存中。
BufferedReader
和BufferedWriter
可以帮助您完成此任务。 - 最后,它可能需要一些努力,但您将能够仅解析所需的数据或所有数据,但使用一小部分内存。
我希望这对你有帮助