Rumah > Java > javaTutorial > Apakah Cara Paling Cekap untuk Mengira Baris dalam Fail Java?

Apakah Cara Paling Cekap untuk Mengira Baris dalam Fail Java?

DDD
Lepaskan: 2024-12-08 01:04:12
asal
398 orang telah melayarinya

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

Cara Menentukan Bilangan Baris dalam Fail Java dengan Cekap

Mengira bilangan baris dalam fail adalah tugas biasa dalam pengaturcaraan . Di Java, satu pendekatan biasa ialah membaca fail baris demi baris sehingga sampai ke penghujung, yang boleh menjadi tidak cekap untuk fail besar.

Penyelesaian yang lebih dioptimumkan ialah menggunakan kaedah countLinesOld, yang membaca bait fail dengan bait dan mengira kejadian aksara baris baharu (n). Pendekatan ini jauh lebih pantas daripada membaca fail baris demi baris, terutamanya untuk fail besar.

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();
    }
}
Salin selepas log masuk

Walau bagaimanapun, untuk prestasi yang lebih pantas, pertimbangkan untuk menggunakan kaedah countLinesNew, yang memanfaatkan pengoptimuman seperti membuka gelung dan caching kiraan baris untuk setiap ketulan 1024-bait fail.

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();
    }
}
Salin selepas log masuk

Kaedah yang dioptimumkan ini menyediakan peningkatan kelajuan yang ketara berbanding pendekatan readLines standard, menjadikannya ideal untuk mengira baris dalam fail besar dengan cekap.

Atas ialah kandungan terperinci Apakah Cara Paling Cekap untuk Mengira Baris dalam Fail Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan