初始问题:
我有以下问题:我正在使用 Java 加入 2 个 CSV。虽然我可以“流式传输”其中一个 CSV(读入、处理、逐行写出),但较小的一个驻留在内存中(HashMap
准确地说是),因为我需要查找每一行的键大CSV,同时通过它。问题:如果“小 CSV”太大而无法保存在内存中,我会遇到 OutOfMem 错误。
虽然我知道我可以通过将两个 CSV 读入数据库并在那里执行连接来避免这些问题,但在我的应用程序中这样做是不可行的。是否有 Java 包装器(或某种其他类型的对象)允许我只将HashMap
' 的键保留在内存中,并将其所有值放入磁盘上的临时文件中(以自我管理的方式)?
更新:
在ThomasKläger和JacobG的评论之后,我通过以下方式解决了这个问题:
使用 aHashMap
来存储一行的键,以及使用RandomAccessFile
's来存储该行的开始和结束位置.getFilePointer()
。
在浏览大型 CSV 时,我现在使用HashMap
来查找匹配行的位置.seek(pos)
,并读取它们。
这是一个可行的解决方案,非常感谢。