Maison > Java > javaDidacticiel > Quelle est la manière la plus efficace de compter les lignes dans un fichier Java ?

Quelle est la manière la plus efficace de compter les lignes dans un fichier Java ?

DDD
Libérer: 2024-12-08 01:04:12
original
398 Les gens l'ont consulté

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

Comment déterminer efficacement le nombre de lignes dans un fichier Java

Compter le nombre de lignes dans un fichier est une tâche courante en programmation . En Java, une approche courante consiste à lire le fichier ligne par ligne jusqu'à la fin, ce qui peut s'avérer inefficace pour les fichiers volumineux.

Une solution plus optimisée consiste à utiliser la méthode countLinesOld, qui lit le fichier octet par octet. octet et compte les occurrences du caractère de nouvelle ligne (n). Cette approche est nettement plus rapide que la lecture du fichier ligne par ligne, en particulier pour les fichiers volumineux.

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();
    }
}
Copier après la connexion

Cependant, pour des performances encore plus rapides, pensez à utiliser la méthode countLinesNew, qui exploite des optimisations telles que le déroulement de la boucle et la mise en cache. le nombre de lignes pour chaque morceau de 1 024 octets du fichier.

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();
    }
}
Copier après la connexion

Ces méthodes optimisées offrent des améliorations de vitesse substantielles par rapport à l'approche standard readLines, ce qui les rend idéales pour compter efficacement les lignes dans des fichiers volumineux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal