从文件中读取,内存不足

时间:2015-10-06 00:19:02

标签: java file csv io

我刚刚被问到一个面试问题,该问题涉及从CSV文件中读取并总结某些单元格中的条目。当被要求对其进行优化时,如果给出一个大小为100 gig的CSV,我就无法回答如何处理内存不足的情况。

在Java中,从文件中读取的工作原理是什么?我们怎么知道什么东西太大了?我们该如何处理?我被告知你可以传入中间读者对象,而不是试图阅读整个事物?

3 个答案:

答案 0 :(得分:2)

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

小例子:

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

Here是文档

答案 1 :(得分:0)

有几种方法可以从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);
}

答案 2 :(得分:-1)

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