从文件中读取内存不足
问题描述:
我刚刚被问到一个面试问题,该问题用于处理从CSV文件中读取和总结某些单元格中的条目。当被要求优化它时,如果我们得到一个大小为CSV的大小为100的演唱会,我无法回答如何处理内存不足的情况。从文件中读取内存不足
在Java中,如何从文件中读取工作?我们如何知道什么时候太大?我们如何处理?我被告知可以传递中间读者对象而不是尝试读取整个事物?
答
有几种方法从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
读取文件。它可能不是最好的解决方案。
一次处理一行。 – EJP
你可以做一些类似于[this](http://*.com/a/309718/940217)的东西,除了附加到StringBuilder之外,还可以当场进行求和计算。试图将整个输入文件存储在内存中会造成麻烦。 –