如何在 Java 中将(序列化)数组的特定切片从磁盘上的文件读取到内存中?



我有一个可序列化对象的列表,我想将其存储在主节点的文件中。文件是我唯一可以用来存储数据的东西。有多个直接访问文件的从属节点只想读取列表的一部分,然后处理数据。集合中的对象是可序列化的,但不强制序列化它们。

主节点

Collection<SerializableObject> l = getSerializableCollection();
writeDataToFile(l)

从属节点

int id = getSlaveNodeID();
int leftIndex, rightIndex = getSliceOfArrayForSlaveNode(id)
Collection<SerializableObjects> l = readSliceOfArrayFromFile(leftIndex, rightIndex);
performComputationOnArraySlice(l);

如何(如果可能(在内存中仅读取该数组的一部分?我不想在每个从属节点的内存中读取整个数组,因为文件大小很大,而且从属节点必须只处理数组中从 leftIndex 到 rightIndex 的切片。

好的,我可以给你一个提示,但不能提供一个可行的解决方案。

  • 首先,您应该考虑使用自定义输出格式而不是序列化。 当您有一个状态或没有那么多要存储的数据时,它工作得很好,但是如果你 正在处理大型数据集,我强烈建议您编写自己的文件格式。
  • 其次,使用文件格式允许您定义自定义读取函数您可以在其中逐行处理保存,并将整个数据集的一小部分仅保留在内存中。BufferedReaderBufferedWriter可以帮助您完成此任务。
  • 最后,它可能需要一些努力,但您将能够仅解析所需的数据或所有数据,但使用一小部分内存。

我希望这对你有帮助

最新更新