java - 使用 Java 找出文件中有多少非空行的最快方法是什么?

标签 java

使用 Java 找出文件中有多少非空行的最快方法是什么?

最佳答案

最简单的方法是使用 BufferedReader,并检查哪些行是空的。然而,这是一种相对较慢的方法,因为它需要为文件中的每一行创建一个 String 对象。更快的方法是使用 read() 将文件读入数组,然后迭代数组以计算换行符。

这是两个选项的代码;第二个在我的机器上花费了大约 50% 的时间。

public static void timeBufferedReader () throws IOException
{
    long bef = System.currentTimeMillis ();

    // The reader buffer size is the same as the array size I use in the other function
    BufferedReader reader = new BufferedReader(new FileReader("test.txt"), 1024 * 10);
    int counter = 0;
    while (reader.ready())
    {
        if (reader.readLine().length() > 0)
            counter++;
    }

    long after = System.currentTimeMillis() - bef;

    System.out.println("Time: " + after + " Result: " + counter);

}

public static void timeFileReader () throws IOException
{
    long bef = System.currentTimeMillis();

    FileReader reader = new FileReader("test.txt");
    char[] buf = new char[1024 * 10];
    boolean emptyLine = true;
    int     counter = 0;
    while (reader.ready())
    {
        int len = reader.read(buf,0,buf.length);
        for (int i = 0; i < len; i++)
        {
            if (buf[i] == '\r' || buf[i] == '\n')
            {
                if (!emptyLine)
                {
                    counter += 1;
                    emptyLine = true;
                }
            }
            else emptyLine = false;
        }
    }

    long after = System.currentTimeMillis() - bef;

    System.out.println("Time: " + after + " Result: " + counter);

}

关于java - 使用 Java 找出文件中有多少非空行的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/688431/

相关文章:

java - 坚持尝试对并行数组进行排序

java - 在 Java 中使用 JDBC 的 ClassNotFoundException

Java,bukkit插件,抛出错误

java - Java 中使用零填充的三重 DES 加密/解密

java - 调用需要 API 级别 21,当前最低为 8

java - 元素类型 "Resource"必须后跟属性规范 ">"或 "/>"

java - 错误 : exception IOException is never thrown in body of corresponding try statement

java - 异常处理 : Will parent class exception catch child exception too

java - 方法 getModule 为命名模块中的类返回未命名模块

java - 如何调用嵌套接口(interface)的方法