[英]Use HashMap to store file positions and access these randomly using RandomAccessFile
最初的问题:
我有以下问题:我正在使用Java加入2个CSV。 虽然我可以“流式处理”其中一个CSV(逐行读入,处理,写出),但是较小的CSV则驻留在内存中(准确地说是HashMap
),因为我需要查找每一行的键大型CSV文件同时进行浏览。 问题:如果“小CSV”太大而无法保存在内存中,则我将遇到OutOfMem错误。
虽然我知道可以通过将两个CSV都读入数据库并在其中执行联接来避免这些问题,但是在我的应用程序中这样做是不可行的。 是否有Java包装器(或其他某种对象)可以让我仅将HashMap
的键保留在内存中,并将其所有值放入磁盘上的临时文件中(以自管理方式)?
更新:
在ThomasKläger和JacobG发表评论后,我通过以下方式解决了这个问题:
使用HashMap
通过RandomAccessFile
的.getFilePointer()
存储行的键以及行的开始和结束位置。
在浏览大型CSV时,我现在使用HashMap
查找匹配行的位置.seek(pos)
并读取它们。
这是一个可行的解决方案,非常感谢。
根据您的描述,您需要诸如堆外收集之类的东西,例如MapDb lib, http : //www.mapdb.org/ 。
MapDB提供Java Maps,Sets,Lists,Queues和其他由堆外或磁盘存储支持的集合。 它是Java收集框架和嵌入式数据库引擎之间的混合体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.