0

初始问题:

我有以下问题:我正在使用 Java 加入 2 个 CSV。虽然我可以“流式传输”其中一个 CSV(读入、处理、逐行写出),但较小的一个驻留在内存中(HashMap准确地说是),因为我需要查找每一行的键大CSV,同时通过它。问题:如果“小 CSV”太大而无法保存在内存中,我会遇到 OutOfMem 错误。

虽然我知道我可以通过将两个 CSV 读入数据库并在那里执行连接来避免这些问题,但在我的应用程序中这样做是不可行的。是否有 Java 包装器(或某种其他类型的对象)允许我只将HashMap' 的键保留在内存中,并将其所有值放入磁盘上的临时文件中(以自我管理的方式)?


更新:

在ThomasKläger和JacobG的评论之后,我通过以下方式解决了这个问题:

使用 aHashMap来存储一行的键,以及使用RandomAccessFile's来存储该行的开始和结束位置.getFilePointer()

在浏览大型 CSV 时,我现在使用HashMap来查找匹配行的位置.seek(pos),并读取它们。

这是一个可行的解决方案,非常感谢。

4

1 回答 1

0

根据您的描述,您需要诸如堆外集合之类的东西,例如 MapDb lib,http ://www.mapdb.org/来自描述:

MapDB 提供 Java Maps、Sets、Lists、Queues 和其他由堆外或磁盘存储支持的集合。它是java集合框架和嵌入式数据库引擎的混合体。

于 2017-06-23T17:50:47.297 回答