繁体   English   中英

使用HashMap存储文件位置,并使用RandomAccessFile随机访问这些位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM