开发者社区> 问答> 正文

Java程序中,读取大文件,超过内存大小,如何防止程序崩溃

Java程序中,读取大文件,超过内存大小,如何防止程序崩溃

展开
收起
道月芬1 2021-10-31 11:39:38 3612 0
4 条回答
写回答
取消 提交回答
  • 设置缓冲,循环读取,直到遇到EOF读取完毕

    2021-11-03 20:24:34
    赞同 展开评论 打赏
  • 不要一次性把所有数据读入内存,要设置一个buffer,一部分一部分循环读取

    2021-11-03 14:46:05
    赞同 展开评论 打赏
  • never say never~
    1. 传统方式:在内存中读取文件内容

     读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:    Files.readLines(new File(path), Charsets.UTF_8);    FileUtils.readLines(new File(path));    实际上是使用BufferedReader或者其子类LineNumberReader来读取的。   传统方式的问题: 是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。

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

    1. 大文件读取处理方式

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

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

    2021-11-03 14:10:00
    赞同 展开评论 打赏
  • 不要一次性把所有数据读入内存,要设置一个buffer,一部分一部分循环读取

    2021-11-03 12:17:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载