午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

java - 讀取大于內(nèi)存的大文件怎么讀?

瀏覽:176日期:2023-12-28 16:57:06

問題描述

參考: 有一個1G大小的一個文件,內(nèi)存限制大小是10M,有序返回頻數(shù)最高的50個詞,該怎么做?

網(wǎng)上有很多該問題的解決方案,都是用分而治之的思想,提到了遍歷整個文件。

那么我的問題是:如果單純地逐行讀取大文件,算是把1G文件全都加載進(jìn)內(nèi)存嗎?或者說是讀取大于內(nèi)存的文件應(yīng)該怎么讀?

問題解答

回答1:

在這里內(nèi)存就像一條管道,逐行讀是把1G文件在內(nèi)存里過一遍而已,10M表示管道的粗細(xì)。所以,逐行讀是把1G文件加載進(jìn)去過內(nèi)存。

回答2:

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

file再大,只要每一行的長度有限,整個文件讀完會需要不少的時間,但不會占用太大的內(nèi)存。

回答3:

分塊讀,每讀一個塊一個結(jié)果集,最后對結(jié)果集聚合處理文本的話,知道行數(shù)會更好

回答4:

linux上面有個指令叫做split可以并發(fā)快速把大文本分割成小的文件,然后處理就方便了呀,這種算法叫做外排序

回答5:

內(nèi)存就好比草稿紙,寫滿一篇就翻篇。 用過、沒用的數(shù)據(jù)就扔掉了。

簡單舉例,創(chuàng)建一個變量 buff,設(shè)定好它的大小,打開文件流往里填,填滿以后查你要的內(nèi)容,查到就統(tǒng)計到另外一個變量里計數(shù)。 然后清空buff,繼續(xù)之前讀取的位置再次裝載內(nèi)容…… 直到讀取完畢,統(tǒng)計也就完成了。

回答6:

針對不同的系統(tǒng),都會提供一個API來操作大于內(nèi)存的文件,也就是將文件當(dāng)做內(nèi)存來處理:

內(nèi)存映射

mmap

CreateFileMapping

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 一级欧美一级日韩片 | 成人在线观看网址 | 欧美一区二区三区观看 | 天堂久久网| 国产精品久久久久久亚洲影视 | 日本爱爱网站 | 日韩一区二区三区视频在线观看 | 激情丁香 | 337p亚洲精品色噜噜噜 | www超碰在线 | 深爱五月激情五月 | 国产在线观看免费视频软件 | 黄色网zhan | 天堂在线视频免费观看 | 欧美色频 | 国产最新精品视频 | 欧美精品一区二区蜜桃 | 欧美日韩不卡视频 | 中文字幕第一页在线 | 国产第5页| av无限看 | 日韩精品视 | 国产成人一级 | 国产成人自拍在线 | 免费观看亚洲 | 久久国产香蕉视频 | 成人av一区二区三区 | 男人天堂免费视频 | 欧美性一区二区三区 | 欧美内谢 | 操老女人逼视频 | 久久国产网| 久久男人天堂 | 这里只有精品视频在线观看 | 色姐 | 日本a级黄色| 日本四虎影院 | 亚洲一区二区三区视频在线 | 久久久久免费 | 中文字幕一二三四 | 欧美激情综合网 |