java - superCSV java 库内存不足

标签 java supercsv

这是计算文件行数的代码。它与 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/

相关文章:

java - 我怎样才能告诉 SuperCSV 不要将空字符串映射到 null

java - SuperCSV 中的可选 ParseDate SuperCsvCellProcessorException 是否有解决方法?

java - 如何使用 SuperCSV 获取具有自定义 header 名称而不是 bean 字段名称的 csv?

java - 使用 SuperCSV CSVBeanReader 时在字符串上使用什么单元处理器

安全提示中的 Java Logo 替换

java - 为什么我收到 IOException : PDF header signature not found when creating a PDF?

java - Android Java - 警报管理器大部分工作完美,但有时会延迟

java - 如何使用 "this"关键字在类中调用具有 1 个以上参数的多个构造?

Java String 到 int 二进制数的转换

supercsv - 有关在 csv 中查找和报告重复行的建议