日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

在內存中讀取
讀取文件行的標準方式是在內存中讀取,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行連續的讀?。?/p>

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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品一区二区免费 | 欧美二区视频 | 国产精品片在线观看 | 精品久久久久久亚洲综合网 | 亚洲国产美女 | 久久va| 欧美日韩国产中文字幕 | 国产精品18 | 久久加久久 | 日本一区二区免费看 | 久久亚洲美女视频 | 美日韩成人 | 午夜精 | av大片在线| 欧美成人在线免费视频 | 欧洲亚洲成人 | 国产真实精品久久二三区 | 精品一区二区久久 | 国产一区中文字幕 | 亚洲成人一区 | 久久精品网| 国产精品自拍系列 | 激情网综合 | 日韩国产一区 | 亚洲精品国产综合区久久久久久久 | 色综合久久久久综合99 | 综合久久久久久久 | 日韩毛片在线看 | 日日爱夜夜爱 | 91久久国产| 日本一区二区三区在线播放 | 日韩精品免费在线观看 | 99久久精品一区二区成人 | 欧美精品一区二区三区视频 | 国产精品视频一二三区 | 日韩色区 | 欧美日免费 | 亚洲一区二区日本 | 精品久久精品久久 | 国产在线一区二区 | 亚洲精品视频在线 |