多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 如何利用Java高效讀取大文件

如何利用Java高效讀取大文件

來源:程序員人生   發布時間:2015-04-13 08:33:43 閱讀次數:3996次

在內存中讀取
讀取文件行的標準方式是在內存中讀取,Guava 和Apache Commons IO都提供了以下所示快速讀取文件行的方法:

Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path));

這類方法帶來的問題是文件的所有行都被寄存在內存中,當文件足夠大時很快就會致使程序拋出OutOfMemoryError 異常。
讀取1個大約1G的文件

public void readFiles() throws IOException { String path = "..."; Files.readLines(new File(path), Charsets.UTF_8); }

這類方式剛開始只占用了很少許的內存,但是,當文件全部讀入內存后,我們可以看到,占用了大量的內存(約2個G)

[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 2666 Mb [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 490 Mb

這意味著這1進程消耗了大約2.1G的內存,由于文件的所有行都被存儲在了內存中,把文件所有的內容都放在內存中很快會耗盡可用內存――不論實際可用內存有多大,這點是不言而喻的。
另外,我們通常不需要把文件的所有行1次性地放入內存中――相反,我們只需要遍歷文件的每行,然后做相應的處理,處理完以后把它扔掉。所以,這正是我們將要做的――通過行迭代,而不是把所有行都放在內存中。
文件流
現在我們來看看下面這類解決方法,我們用Java.util.Scanner 掃描文件的每行,1行1行連續的讀取:

FileInputStream inputStream = null; Scanner sc = null; try { inputStream = new FileInputStream(path); sc = new Scanner(inputStream, "UTF⑻"); while (sc.hasNextLine()) { String line = sc.nextLine(); // System.out.println(line); } // note that Scanner suppresses exceptions if (sc.ioException() != null) { throw sc.ioException(); } } finally { if (inputStream != null) { inputStream.close(); } if (sc != null) { sc.close(); } }

這類方案會遍歷文件中的所有行,允許對每行進行處理,而不保持對它的援用,總之沒有把他們寄存在內存中,我們可以看到,大約消耗了150MB內存。

[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 763 Mb [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 605 Mb

Apache Commons IO流
一樣可使用Commons IO流,利用該庫提供的自定義 LineIterator類:

LineIterator it = FileUtils.lineIterator(theFile, "UTF⑻"); try { while (it.hasNext()) { String line = it.nextLine(); // do something with line } } finally { LineIterator.closeQuietly(it); }

一樣也消耗了相當少的內存,大約150M:

[main] INFO o.b.java.CoreJavaIoIntegrationTest - Total Memory: 752 Mb [main] INFO o.b.java.CoreJavaIoIntegrationTest - Free Memory: 564 Mb
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产欧美亚洲精品a | 国产成人免费片在线观看 | 久久久久日韩精品免费观看网 | 欧美超清性videosfreehd | 久久精品一区二区三区四区 | 精品日韩欧美 | 欧美在线一级视频 | 久久99精品国产99久久 | 中文字幕在线看 | 另类毛片| 2020狠狠操 | 亚洲欧美日本人成在线观看 | 日韩精品一区二区三区免费视频 | 精品久久伊人 | 一级做a爱片 | 免费一级毛片在播放视频 | 最近中文字幕免费在线看 | 日本不卡视频在线视频观看 | 老司机午夜性大片免费 | 可以免费观看欧美一级毛片 | 国产精品久久精品 | 日本欧美视频 | 日韩精品 欧美 | 伊人免费网 | 亚洲国产aaa毛片无费看 | 福利国产精品 | 免费视频一区二区性色 | 国产亚洲欧美另类专区 | www在线视频在线播放 | 亚洲在线看片 | 亚洲综合色网站 | 亚洲视频中文字幕 | 国产原创中文字幕 | 亚洲一区二区三区精品国产 | 又黄又www| 欧美视频xxx | 欧洲一级毛片 | free性欧美另类hd | 极品美女嫩模瑶瑶大尺度啪啪 | 亚洲 欧美 日韩 另类 | 午夜精品久久久久 |