一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 完美解決java讀取大文件內存溢出的問題

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

2020-12-13 20:10echoty Java教程

下面小編就為大家帶來一篇完美解決java讀取大文件內存溢出的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1. 傳統方式:在內存中讀取文件內容

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

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

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

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

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

2. 大文件讀取處理方式

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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庫實現,利用該庫提供的自定義LineIterator

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

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

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

原文鏈接:http://www.cnblogs.com/echoty/p/7326827.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产永久在线观看 | 国产区一二三四区2021 | 青草碰人人澡人人澡 | 韩剧消失的眼角膜免费完整版 | 成人福利网 | 午夜免费小视频 | kisssis无减删全集在线观看 | 短篇同学新婚h系列小说 | 国产精品一区二区三 | 非洲黑女人性xxxx | 美女隐私部位视频网站 | 国产精品怡红院永久免费 | 好湿好紧太硬了我好爽 | 狠狠色狠狠色综合曰曰 | 亚洲免费在线观看视频 | 亚洲系列国产系列 | 欧美一区二区免费 | 亚洲无人区乱码中文字幕 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美色青 | 国产在线观看a | 亚洲 欧美 国产 综合首页 | 美国高清xxxxx18 | 国产成人综合手机在线播放 | 黑人开嫩苞| 成人男女啪啪免费观看网站 | 日产乱码2021永久手机版 | 99精品国产成人一区二区 | 国产片在线看 | 国产综合色在线视频区色吧图片 | 女人张开腿 让男人桶个爽 免费观看 | 扒开女人屁股眼看个够 | 喘息揉弄1v1h老师 | 青草网在线观看 | 国产一二区视频 | 美女张开腿黄网站免费精品动漫 | 欧美肥胖老妇做爰变态 | 亚洲视频在线免费 | 国产亚洲精品第一综合另类 | 婷婷日韩| 天堂69亚洲精品中文字幕 |