for(String column: columnHeaders){
loadFile(); // Here BufferedReader gets instantiated
String header =getLineReader().readLine();
if(header!=null)
{
while (( line=getLineReader().readLine())!=null )
{
cellValue =StatUtils.getCellValue(line,getColumnNumberByName(column));
csvColumn.addRowElement(cellValue,null);
}
}
closeStreams(); // closing the Reader
}
对于每一列,我都需要从头到尾读取 csv 文件。 文本文件可能非常大(100 列和 5000000 行)。
现在,为每列创建一个 BufferedReader 实例 - 1)这会影响性能吗? 2)有没有办法创建一次Reader,每当它到达最后一行时,在下一次迭代中,它将从头开始......
正如我所说,该文件可能非常大,因此,我不想将其缓存到内存中。
有什么建议/意见吗?
提前致谢。
最佳答案
与重新读取整个“非常大”文件的成本相比,为每列创建新的 BufferedReader 的成本可以忽略不计。
每当您担心性能时,您应该采取的第一步就是衡量。您当前的实现实际上是否比您希望的要慢?如果它看起来足够快,那就别管它。
如果事实证明它比您想要的要慢,那么“优化”的最佳方法是读取文件一次,而不是为您关心的每一列读取一次。您可以使用列名称的 Map
到“列处理器”,而不是采用单个列名称。每个“列处理器”都会为其列提供连续的值,并计算它应该计算的任何内容(例如:总和、平均值、平方和,甚至只是将值存储在集合中)。
关于java - 如何在不重新实例化 Bufferedreader 的情况下返回到文件的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671262/