簡體   English   中英

如何從磁盤上的文件中讀取(序列化)數組的特定切片到 Java 中的 memory 中?

[英]How to read a specific slice of a (serialized) array from a file on disk into memory in Java?

我有一個要存儲在主節點文件中的可序列化對象列表。 文件是我唯一可以用來存儲數據的東西。 有多個從節點可以直接訪問文件,它們只想讀取列表的一部分然后處理數據。 集合中的對象是可序列化的,但它們不是必須被序列化的。

主節點

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

從節點

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

我如何(如果可能)在 memory 中只讀取該數組的一部分? 我不想在每個從節點中讀取 memory 中的整個數組,因為文件很大,而且從節點必須只處理數組中從 leftIndex 到 rightIndex 的切片。

好的,我可以給你一個小費,但不能提供一個可行的解決方案。

  • 首先,您應該考慮使用自定義 output 格式而不是序列化。 當您擁有 state 或沒有太多數據要存儲時,它運行良好,但如果您正在處理大型數據集,我強烈建議您編寫自己的文件格式。
  • 其次,使用您的文件格式允許您定義自定義讀數 function ,您可以在其中逐行處理保存並保留在 memory 中僅占整個數據集的一小部分。 BufferedReaderBufferedWriter可以幫助您完成這項任務。
  • 最后,它可能需要一些努力,您將能夠僅解析您需要的數據或所有數據,但使用 memory 的一小部分。

我希望這可以幫助你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM