Heim > Java > javaLernprogramm > Was ist der effizienteste Weg, Zeilen in einer Java-Datei zu zählen?

Was ist der effizienteste Weg, Zeilen in einer Java-Datei zu zählen?

DDD
Freigeben: 2024-12-08 01:04:12
Original
427 Leute haben es durchsucht

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

So ermitteln Sie effizient die Anzahl der Zeilen in einer Java-Datei

Das Zählen der Anzahl der Zeilen in einer Datei ist eine häufige Aufgabe in der Programmierung . In Java besteht ein gängiger Ansatz darin, die Datei Zeile für Zeile bis zum Ende zu lesen, was bei großen Dateien ineffizient sein kann.

Eine optimiertere Lösung ist die Verwendung der countLinesOld-Methode, die die Datei byteweise liest Byte und zählt die Vorkommen des Zeilenumbruchzeichens (n). Dieser Ansatz ist deutlich schneller als das zeilenweise Lesen der Datei, insbesondere bei großen Dateien.

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();
    }
}
Nach dem Login kopieren

Für eine noch schnellere Leistung sollten Sie jedoch die Verwendung der countLinesNew-Methode in Betracht ziehen, die Optimierungen wie das Entrollen der Schleife und das Caching nutzt die Zeilenanzahl für jeden 1024-Byte-Block der Datei.

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();
    }
}
Nach dem Login kopieren

Diese optimierten Methoden bieten erhebliche Geschwindigkeitsverbesserungen gegenüber dem standardmäßigen readLines-Ansatz. Damit eignen sie sich ideal zum effizienten Zählen von Zeilen in großen Dateien.

Das obige ist der detaillierte Inhalt vonWas ist der effizienteste Weg, Zeilen in einer Java-Datei zu zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage