<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦>學習電腦>電腦硬件知識>內存知識>

        java讀取大文件內存溢出怎么解決

        時間: 東浩765 分享

          java讀取大文件內存溢出問題、如何在不重復讀取與不耗盡內存的情況下處理大文件怎么辦?別怕,下面就由學習啦小編為大家整理的解決辦法,供大家參考!

          相關的Java解決方法:

          1、傳統的在內存中讀取

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

        1 2 3Files.readLines(newFile(path), Charsets.UTF_8);FileUtils.readLines(newFile(path));

          這種方法帶來的問題是文件的所有行都被存放在內存中,當文件足夠大時很快就會導致程序拋出OutOfMemoryError 異常。

          例如:讀取一個大約1G的文件:

        1 2 3 4 5@TestpublicvoidgivenUsingGuava_whenIteratingAFile_thenWorks()throwsIOException {String path = ...Files.readLines(newFile(path), Charsets.UTF_8);}

          這種方式開始時只占用很少的內存:(大約消耗了0Mb內存)

        1 2[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory:128Mb[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory:116Mb

          然而,當文件全部讀到內存中后,我們最后可以看到(大約消耗了2GB內存):

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

          這意味這一過程大約耗費了2.1GB的內存——原因很簡單:現在文件的所有行都被存儲在內存中。

          把文件所有的內容都放在內存中很快會耗盡可用內存——不論實際可用內存有多大,這點是顯而易見的。

          此外,我們通常不需要把文件的所有行一次性地放入內存中——相反,我們只需要遍歷文件的每一行,然后做相應的處理,處理完之后把它扔掉。所以,這正是我們將要做的——通過行迭代,而不是把所有行都放在內存中。

          2、文件流

          現在讓我們看下這種解決方案——我們將使用java.util.Scanner類掃描文件的內容,一行一行連續地讀取:

        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21FileInputStream inputStream =null;Scanner sc =null;try{inputStream =newFileInputStream(path);sc =newScanner(inputStream,UTF-8);while(sc.hasNextLine()) {String line = sc.nextLine();// System.out.println(line);}// note that Scanner suppresses exceptionsif(sc.ioException() !=null) {throwsc.ioException();}}finally{if(inputStream !=null) {inputStream.close();}if(sc !=null) {sc.close();}}

          這種方案將會遍歷文件中的所有行——允許對每一行進行處理,而不保持對它的引用。總之沒有把它們存放在內存中:(大約消耗了150MB內存)

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

          3、Apache Commons IO流

          同樣也可以使用Commons IO庫實現,利用該庫提供的自定義LineIterator:

        1 2 3 4 5 6 7 8 9LineIterator it = FileUtils.lineIterator(theFile,UTF-8);try{while(it.hasNext()) {String line = it.nextLine();// do something with line}}finally{LineIterator.closeQuietly(it);}

          由于整個文件不是全部存放在內存中,這也就導致相當保守的內存消耗:(大約消耗了150MB內存)

        1 2[main] INFO o.b.java.CoreJavaIoIntegrationTest - Total Memory:752Mb[main] INFO o.b.java.CoreJavaIoIntegrationTest - Free Memory:564Mb

          4、結論

          這篇短文介紹了如何在不重復讀取與不耗盡內存的情況下處理大文件——這為大文件的處理提供了一個有用的解決辦法。

        java讀取大文件內存溢出怎么解決

        java讀取大文件內存溢出問題、如何在不重復讀取與不耗盡內存的情況下處理大文件怎么辦?別怕,下面就由學習啦小編為大家整理的解決辦法,供大家參考! 相關的Java解決方法: 1、傳統的在內存中讀取 讀取文件行的標準方式是在內存中讀取,Gu
        推薦度:
        點擊下載文檔文檔為doc格式

        精選文章

        • java多線程內存模型
          java多線程內存模型

          Java虛擬機規范中試圖定義一種Java內存模型(Java Memory Model,JMM)來屏蔽掉各種硬件和操作系統的內存訪問差異,以實現讓Java程序在各種平臺下都能達到一致的

        • java如何手動釋放內存
          java如何手動釋放內存

          Java是由Sun Microsystems公司推出的Java面向對象程序設計語言(以下簡稱Java語言)和Java平臺的總稱。 Java由James Gosling和同事們共同研發,并在1995年正式推出。J

        • i蘋果助手怎么清理內存
          i蘋果助手怎么清理內存

          或許有很多人在使用i蘋果助手時常常遇到不知道怎么清理內存,今天就由學習啦小編來教大家怎么清理吧! 清理i蘋果助手的步驟: 設置----通用------用量,

        • iphone怎么刪內存
          iphone怎么刪內存

          今天學習啦小編和大家分享幾個iPhone6內存清理方法教程,教大家如何快速釋放iPhone6內存的解決方法,如果你覺得自己的手機使用時間長了,變得卡了、慢

        580016 主站蜘蛛池模板: 欧美性开放免费网站| 国产69精品久久久久久妇女迅雷| 日本东京热高清色综合| 午夜福利视频| 少妇人妻偷人精品无码视频| 91精品国产综合蜜臀蜜臀| 国产精品一区二区麻豆蜜桃| 国产一卡2卡三卡4卡免费网站| 国产玩具酱一区二区三区| 精品素人AV无码不卡在线观看| 亚洲春色在线视频| 亚洲日韩精品欧美一区二区| 韩国精品视频在线日韩| 国产偷国产偷亚洲高清人| 黄色不卡视频一区二区三区| 伊人成伊人成综合网222| 又湿又紧又大又爽a视频| 亚洲av熟女天堂系列| 国产成人AV在线播放不卡| 日本视频一两二两三区| 风韵丰满熟妇啪啪区老熟熟女| 日韩在线一区二区每天更新| 日韩 一区二区在线观看| 青青青爽在线视频观看| 五月婷久久麻豆国产| 97色伦97色伦国产| 欧美人在线一区二区三区| julia中文字幕久久亚洲| 国产精品成人网址在线观看| 久久久久久综合网天天| 日本国产精品第一页久久| 国产亚洲999精品AA片在线爽| 亚洲综合无码明星蕉在线视频| 春雨电影大全免费观看| 精品久久人人做爽综合| 狠狠色香婷婷久久亚洲精品| 精品少妇av蜜臀av| 欧美精品一国产成人综合久久| 亚洲老熟女一区二区三区| 国产亚洲精品一区在线播放| 一区二区三区自拍偷拍视频 |