这是计算文件行数的代码。它与 BufferedReader
一起工作并且很好。没问题 。总共有超过 25,000,000 行
BufferedReader br = new BufferedReader(new FileReader("C:\\...test.csv"));
int lineNbr = 0;
while(br.readLine() != null) {
lineNbr++;
if (lineNbr%1000000==0) {
System.out.println(lineNbr);
}
}
br.close();
System.exit(0);
这是与 SuperCSV 类似的代码.它在第 11,000,000 行之后抛出 out of memory
CsvListReader reader = new CsvListReader(new FileReader("C:\\... test.csv"), CsvPreference.EXCEL_PREFERENCE );
List<String> row = reader.read();
row = reader.read();
lineNbr = 0;
while (reader.read() != null) {
lineNbr++;
if (lineNbr%1000000==0) {
System.out.println(lineNbr);
}
}
reader.close();
System.exit(0);
我做错了什么?如何使用 SuperCSV 正确读取文件?
最佳答案
根据您的示例代码和对 SuperCSV 代码的快速查看,我看不出有任何理由引发 OutOfMemory 异常。我怀疑您没有发布样本中的所有信息,或者其他原因在起作用。
您可以在此处查看 SuperCSV 的源代码:
我没有看到任何存储的状态会导致引用的堆内存以无法被垃圾收集的方式增长。
另一种可能性是您的 CSV 文件已损坏,可能在某些地方缺少换行符。库至少在一个位置调用 readLine。
关于java - superCSV java 库内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799807/