iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >利用java读取超大文件时出现内存溢出如何解决
  • 510
分享到

利用java读取超大文件时出现内存溢出如何解决

javaava 2023-05-31 07:05:38 510人浏览 薄情痞子
摘要

利用java读取超大文件时出现内存溢出如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 传统方式:在内存中读取文件内容读取文件行的标准方式是在内存中读

利用java读取超大文件时出现内存溢出如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1. 传统方式:在内存中读取文件内容

读取文件行的标准方式是在内存中读取,Guava 和Apache Commons io都提供了如下所示快速读取文件行的方法:

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

实际上是使用BufferedReader或者其子类LineNumberReader来读取的。

传统方式的问题: 是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。

问题思考:我们通常不需要把文件的所有行一次性地放入内存中,相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以我们可 以通过行迭代方式来读取,而不是把所有行都放在内存中。

2. 大文件读取处理方式

不重复读取与不耗尽内存的情况下处理大文件:

(1)文件流方式:使用java.util.Scanner类扫描文件的内容,一行一行连续地读取

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

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

 该方案由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 利用java读取超大文件时出现内存溢出如何解决

本文链接: https://www.lsjlt.com/news/224293.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用java读取超大文件时出现内存溢出如何解决
    利用java读取超大文件时出现内存溢出如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 传统方式:在内存中读取文件内容读取文件行的标准方式是在内存中读...
    99+
    2023-05-31
    java ava
  • java读取大文件内存溢出如何解决
    在Java中,如果读取大文件时遇到内存溢出的问题,可以尝试以下几种解决方案:1. 使用缓冲区:使用BufferedReader或者B...
    99+
    2023-08-25
    java
  • Excel文件利用Poi进行读取时出现内存溢出如何解决
    这篇文章给大家介绍Excel文件利用Poi进行读取时出现内存溢出如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.dump内存文件liunx使用如下命令:./jmap -dump:format=b,file=h...
    99+
    2023-05-31
    poi excel
  • java读取文件内存溢出如何解决
    Java读取文件时出现内存溢出的问题,可以尝试以下几种解决方法:1. 使用缓冲区:通过缓冲区来读取文件内容,可以减少频繁的IO操作,...
    99+
    2023-09-20
    java
  • python读取大文件内存溢出如何解决
    处理大文件时,可以采用以下方法来避免内存溢出问题:1. 逐行读取:使用文件对象的readline()方法逐行读取文件内容,而不是一次...
    99+
    2023-09-15
    python
  • java读取大文件内存溢出怎么解决
    当Java读取大文件时,可能会遇到内存溢出的问题。这是因为默认情况下,Java在读取文件时会将文件的所有内容一次性加载到内存中,如果...
    99+
    2023-10-23
    java
  • java读取文件内存溢出怎么解决
    Java读取文件内存溢出可以通过以下几种方式进行解决:1. 使用BufferedReader逐行读取文件:使用BufferedRea...
    99+
    2023-08-08
    java
  • Java通过导出超大Excel文件解决内存溢出问题
    前言 将业务数据导出到Excel表中,导出任务数据量较大时,导出的项目就会内存溢出,本文通过Java操作Poi的SXSSFWorkbook类进行导出,解决内存溢出问题。 1.采用Po...
    99+
    2024-04-02
  • java中出现内存溢出如何解决
    本篇文章为大家展示了java中出现内存溢出如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了...
    99+
    2023-06-14
  • Java中出现堆内存溢出如何解决
    今天就跟大家聊聊有关Java中出现堆内存溢出如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-15
  • java导出大量数据内存溢出如何解决
    在处理大量数据时,可能会遇到内存溢出的问题。以下是一些解决方法:1. 使用合适的数据结构:确保选择适合处理大量数据的数据结构。例如,...
    99+
    2023-08-20
    java
  • java内存溢出如何解决
    Java内存溢出(Out of Memory Error)是指Java程序在运行过程中申请的内存超出了JVM所能提供的最大内存限制,...
    99+
    2023-10-28
    java
  • java读取文件内存溢出的原因有哪些
    Java读取文件内存溢出的原因主要有以下几种: 文件过大:如果读取的文件过大,超过了JVM堆内存的限制,就会导致内存溢出。这通常...
    99+
    2024-02-29
    java
  • java堆内存溢出如何解决
    Java堆内存溢出指的是在Java应用程序中分配给Java堆的内存空间不足,导致无法继续正常执行程序。要解决Java堆内存溢出问题,...
    99+
    2023-08-23
    java
  • Java中出现内存泄漏与溢出如何解决
    这篇文章将为大家详细讲解有关Java中出现内存泄漏与溢出如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、浅析内存泄露( memory leak):是指程序在申请内存后,无法释放已申...
    99+
    2023-06-15
  • java中list内存溢出如何解决
    在Java中,List的内存溢出问题通常是由于大量数据的存储导致的。以下是一些可能的解决方法:1. 增加JVM的堆内存:通过设置JV...
    99+
    2023-10-09
    java
  • java递归内存溢出如何解决
    解决Java递归内存溢出的方法有以下几种:1. 优化递归算法:检查递归算法是否可以通过迭代或其他非递归方式进行优化,以减少内存消耗。...
    99+
    2023-08-31
    java
  • java元数据区内存溢出如何解决
    Java中的元数据区是指方法区(Method Area),主要用于存储类的信息、常量、静态变量等数据。当元数据区内存溢出时,通常会抛...
    99+
    2023-10-23
    java
  • python读取文件出现乱码如何解决
    读取文件出现乱码的原因可能是文件的编码格式与代码中指定的编码格式不一致。解决办法如下: 使用正确的编码格式打开文件。可以使用op...
    99+
    2023-10-20
    python
  • 如何解决go Fscanf在读取文件时出现的问题
    这篇文章将为大家详细讲解有关如何解决go Fscanf在读取文件时出现的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先要明白Fscanf的工作原理Fscanf在遇到\n才结束遇到\r时就会把\r替换...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作