亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

完美解決java讀取大文件內存溢出的問題

 更新時間:2017年08月10日 08:32:12   投稿:jingxian  
下面小編就為大家?guī)硪黄昝澜鉀Qjava讀取大文件內存溢出的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1. 傳統(tǒng)方式:在內存中讀取文件內容

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

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

實際上是使用BufferedReader或者其子類LineNumberReader來讀取的。

傳統(tǒng)方式的問題: 是文件的所有行都被存放在內存中,當文件足夠大時很快就會導致程序拋出OutOfMemoryError 異常。

問題思考:我們通常不需要把文件的所有行一次性地放入內存中,相反,我們只需要遍歷文件的每一行,然后做相應的處理,處理完之后把它扔掉。所以我們可 以通過行迭代方式來讀取,而不是把所有行都放在內存中。

2. 大文件讀取處理方式

不重復讀取與不耗盡內存的情況下處理大文件:

(1)文件流方式:使用java.util.Scanner類掃描文件的內容,一行一行連續(xù)地讀取

FileInputStream inputStream = null; 
Scanner sc = null; 
try { 
 inputStream = new FileInputStream(path); 
 sc = new Scanner(inputStream, UTF-8); 
 while (sc.hasNextLine()) {
  String line = sc.nextLine(); 
  // System.out.println(line); 
  } 
}catch(IOException e){
  logger.error(e);
}finally {
  if (inputStream != null) { 
  inputStream.close(); 
  } 
  if (sc != null) {
    sc.close();
   }
}

該方案將會遍歷文件中的所有行,允許對每一行進行處理,而不保持對它的引用。總之沒有把它們存放在內存中!

(2)Apache Commons IO流:使用Commons IO庫實現(xiàn),利用該庫提供的自定義LineIterator

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

 該方案由于整個文件不是全部存放在內存中,這也就導致相當保守的內存消耗。

以上這篇完美解決java讀取大文件內存溢出的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java字符編碼解碼的實現(xiàn)詳解

    Java字符編碼解碼的實現(xiàn)詳解

    本篇文章介紹了,Java字符編碼解碼的實現(xiàn)詳解。需要的朋友參考下
    2013-05-05
  • SpringMVC結合Jcrop實現(xiàn)圖片裁剪

    SpringMVC結合Jcrop實現(xiàn)圖片裁剪

    這篇文章主要介紹了SpringMVC結合Jcrop實現(xiàn)圖片裁剪的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Spring?JPA之find拓展方法示例詳解

    Spring?JPA之find拓展方法示例詳解

    這篇文章主要為大家介紹了Spring?JPA之find拓展方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringMVC+MyBatis 事務管理(實例)

    SpringMVC+MyBatis 事務管理(實例)

    本文先分析編程式注解事務和基于注解的聲明式事務。對SpringMVC+MyBatis 事務管理的相關知識感興趣的朋友一起學習吧
    2017-08-08
  • Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    這篇文章主要介紹了Java中的攔截器、過濾器、監(jiān)聽器用法,詳細分析了Java攔截器、過濾器、監(jiān)聽器的功能、使用方法及相關注意事項,需要的朋友可以參考下
    2017-05-05
  • Java基礎之代理原理與用法詳解

    Java基礎之代理原理與用法詳解

    這篇文章主要介紹了Java基礎之代理原理與用法,結合實例形式詳細分析了java代理的概念、原理、用法及相關操作注意事項,需要的朋友可以參考下
    2020-02-02
  • maven倉庫中心mirrors配置多個下載中心(執(zhí)行最快的鏡像)

    maven倉庫中心mirrors配置多個下載中心(執(zhí)行最快的鏡像)

    這篇文章主要介紹了maven倉庫中心mirrors配置多個下載中心(執(zhí)行最快的鏡像),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • SpringBoot使用@PostConstruct注解導入配置方式

    SpringBoot使用@PostConstruct注解導入配置方式

    這篇文章主要介紹了SpringBoot使用@PostConstruct注解導入配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java SoftReference類案例詳解

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Mybatis插入數(shù)據(jù)后自增id獲取方式

    Mybatis插入數(shù)據(jù)后自增id獲取方式

    在MyBatis中,獲取自增主鍵可以通過useGeneratedKeys屬性或selectKey節(jié)點實現(xiàn),useGeneratedKeys設置時,需設置keyProperty指定主鍵字段,數(shù)據(jù)庫表也要相應設置,selectKey節(jié)點可在插入操作后,通過特定SQL查詢獲得主鍵
    2024-09-09

最新評論