为了账号安全,请及时绑定邮箱和手机立即绑定

读取大于内存的大文件怎么读?

读取大于内存的大文件怎么读?

米琪卡哇伊 2019-03-01 11:11:35
参考: 有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做? 网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。 那么我的问题是:如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?或者说是读取大于内存的文件应该怎么读?
查看完整描述

6 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

在这里内存就像一条管道,逐行读是把1G文件在内存里过一遍而已,10M表示管道的粗细。
所以,逐行读是把1G文件加载进去过内存。

查看完整回答
反对 回复 2019-03-01
?
月关宝盒

TA贡献1772条经验 获得超5个赞

try (BufferedReader in = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = in.readLine()) != null) {
        // parse line
    }
}

file再大,只要每一行的长度有限,整个文件读完会需要不少的时间,但不会占用太大的内存。

查看完整回答
反对 回复 2019-03-01
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

分块读,每读一个块一个结果集,最后对结果集聚合
处理文本的话,知道行数会更好

查看完整回答
反对 回复 2019-03-01
?
aluckdog

TA贡献1847条经验 获得超7个赞

linux上面有个指令叫做split可以并发快速把大文本分割成小的文件,然后处理就方便了呀,这种算法叫做外排序

查看完整回答
反对 回复 2019-03-01
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

针对不同的系统,都会提供一个API来操作大于内存的文件,也就是将文件当做内存来处理:

内存映射

  • mmap

  • CreateFileMapping

查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 1310 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信