gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:22:50 25 4
gpt4 key购买 nike

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

主节点

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 可以帮助您完成此任务。
  • 最后,可能需要一些努力,但是您将能够仅解析您需要的数据或所有数据,但只使用一小部分内存。

希望这对你有帮助

关于java - 如何在 Java 中将(序列化)数组的特定切片从磁盘上的文件读取到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62224795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com