java - 如何在不重新实例化 Bufferedreader 的情况下返回到文件的第一行?

标签 java

        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/

相关文章:

java - 从单个主机注册 Spring Boot Eureka 客户端的多个实例

java - 安卓/Java : JSON HTTP Request

java - 检查本地时间与另一个时区的给定时间

Java:简单但不寻常的 NullPointerException

java - 加载另一个类时 Jpanel 不绘制

java - Websphere 上 dom4j 的空指针异常

java - "Exception in thread "AWT-EventQueue-0 "java.lang.NullPointerException"。我不知道我做错了什么

java - Java 库是否具有 C++ 中的 std::lower_bound() 、 std::upper_bound() 之类的函数?

java - 无法理解 session 对象的行为

java - 将 VisualVM 与 IntelliJ 结合使用