【发布时间】:2017-03-11 21:02:34
【问题描述】:
我有一个包含 100,000 行的文件,每行是一个由空格分隔的 1000 个整数(范围从 0 到 1,000,000)的列表。现在我需要创建一个 API,当给定两个输入 a 和 b 时,它会告诉我文件的同一行中是否存在两个数字,其中 b 在索引方面位于 a 之后。文件总大小约为 700 MB。
由于它是一个 API,我不能每次都通过创建流从文件中读取,因为我必须注意响应时间并且磁盘读取速度很慢。由于文件太大,我无法将所有内容加载到内存中。
关于什么是最佳方式的任何建议?
注意 - 我通过将所有内容加载到内存并制作数字哈希图来创建 API -> 它所属的行集,然后尝试搜索它。它适用于较小的文件,但是当我尝试用较大的文件启动服务器时,服务器无法启动(我也是 JAVA 的新手,谁能帮我看看在哪里查看它为什么没有启动的日志?。我我只是在我的 bash 脚本中执行 java -jar $DIR/target/test.jar)
【问题讨论】:
-
700 MB 太大了?
-
服务器不启动时报什么错误?如果它是内存不足的消息,您可能只需为其分配更多内存来解决问题,除非您预见这些文件会变得更大(比如超过几 GB)。
-
我假设上限是一百万。不均匀的逗号分组是印度独有的怪癖,我正在编辑以反映标准用法。
-
此外,具有 2 个 Integer 对象作为键和值的 HashMap 对于内存使用来说并不是非常理想的。您可能想研究使用使用标准整数而不是对象的本机 Java 集合:labs.carrotsearch.com/hppc.html,但这是一个高级主题。
-
@john16384 如果程序化方法很小、不雅且处理不当,即使 7 MB 也相当大