ホームページ >Java >&#&チュートリアル >Java ファイルの行数を数える最も効率的な方法は何ですか?

Java ファイルの行数を数える最も効率的な方法は何ですか?

DDD
DDDオリジナル
2024-12-08 01:04:12432ブラウズ

What's the Most Efficient Way to Count Lines in a Java File?

Java ファイル内の行数を効率的に求める方法

ファイル内の行数を数えるのは、プログラミングにおける一般的なタスクです。 。 Java の一般的なアプローチの 1 つは、ファイルを最後に到達するまで 1 行ずつ読み取ることですが、これは大きなファイルの場合は非効率的になる可能性があります。

より最適化された解決策は、ファイルをバイト単位で読み取る countLinesOld メソッドを使用することです。バイトに戻り、改行文字 (n) の出現数をカウントします。この方法は、特に大きなファイルの場合、ファイルを 1 行ずつ読み取るよりも大幅に高速です。

public static int countLinesOld(String filename) throws IOException {
    InputStream is = new BufferedInputStream(new FileInputStream(filename));
    try {
        byte[] c = new byte[1024];
        int count = 0;
        int readChars = 0;
        boolean empty = true;
        while ((readChars = is.read(c)) != -1) {
            empty = false;
            for (int i = 0; i < readChars; ++i) {
                if (c[i] == '\n') {
                    ++count;
                }
            }
        }
        return (count == 0 && !empty) ? 1 : count;
    } finally {
        is.close();
    }
}

ただし、さらに高速なパフォーマンスを得るには、ループの展開やキャッシュなどの最適化を利用する countLinesNew メソッドの使用を検討してください。ファイルの 1024 バイト チャンクごとの行数。

public static int countLinesNew(String filename) throws IOException {
    InputStream is = new BufferedInputStream(new FileInputStream(filename));
    try {
        byte[] c = new byte[1024];
        
        int readChars = is.read(c);
        if (readChars == -1) {
            // bail out if nothing to read
            return 0;
        }
        
        // make it easy for the optimizer to tune this loop
        int count = 0;
        while (readChars == 1024) {
            for (int i=0; i<1024;) {
                if (c[i++] == '\n') {
                    ++count;
                }
            }
            readChars = is.read(c);
        }
        
        // count remaining characters
        while (readChars != -1) {
            for (int i=0; i<readChars; ++i) {
                if (c[i] == '\n') {
                    ++count;
                }
            }
            readChars = is.read(c);
        }
        
        return count == 0 ? 1 : count;
    } finally {
        is.close();
    }
}

これらの最適化されたメソッドにより、以前のメソッドに比べて速度が大幅に向上します。標準の readLines アプローチにより、大きなファイルの行を効率的にカウントするのに最適です。

以上がJava ファイルの行数を数える最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。