从文件中读取内存不足

问题描述:

我刚刚被问到一个面试问题,该问题用于处理从CSV文件中读取和总结某些单元格中的条目。当被要求优化它时,如果我们得到一个大小为CSV的大小为100的演唱会,我无法回答如何处理内存不足的情况。从文件中读取内存不足

在Java中,如何从文件中读取工作?我们如何知道什么时候太大?我们如何处理?我被告知可以传递中间读者对象而不是尝试读取整个事物?

+3

一次处理一行。 – EJP

+0

你可以做一些类似于[this](http://*.com/a/309718/940217)的东西,除了附加到StringBuilder之外,还可以当场进行求和计算。试图将整个输入文件存储在内存中会造成麻烦。 –

面试官给了你一个提示 - BufferedReader。它是逐行读取大文件的有效选择。

小例子:

String line; 
BufferedReader br = new BufferedReader("c:/test.txt"); 
while ((line= br.readLine()) != null) { 
    //do processing 
} 
br.close(); 

Here是文档

+0

这里你不需要初始化'line'。 – EJP

+0

@EJP Ofcourse。谢谢 :) – sam

有几种方法从Java中读取文件,其中一些涉及保持所有内存中的文件的行(或数据)当你“读”由类似换行符(例如逐行阅读)分隔的数据时。

对于想要一次处理较小位的较大文件,使用Scanner类(或类似的方法一次读取特定字节)。

示例代码:

FileInputStream inputStream = new FileInputStream(path); 
Scanner sc = new Scanner(inputStream, "UTF-8"); 
while (sc.hasNextLine()) { 
    String line = sc.nextLine(); 
    // System.out.println(line); 
} 

您可以使用RandomAccessFile读取文件。它可能不是最好的解决方案。