Was ist das beste Lesen von Dateien (Java)

Es gibt viele Möglichkeiten, Java-Dateien zu lesen, aber ich habe gemessen, welche die schnellste war. Dieses Mal habe ich gemessen, indem ich alle Zeilen gelesen habe.

Ziel

1.Files.readAllLines Lesen Sie alle Zeilen einer Datei mit readAllLines von java.nio.file.Files, die aus Java7 eingeführt wurden. Intern wird nur ein BufferedReader erstellt, zeilenweise gelesen, in eine Liste aufgenommen und zurückgegeben.

try {
    List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
} catch (IOException e) {
    e.printStackTrace();
}
  1. Verwenden Sie FileReader. Dies ist die traditionelle Methode. Lesen Sie die Datei mit FileReader und verpacken Sie sie mit BufferedReader. Als Zeichencode wird der Zeichencode der Umgebung unverändert verwendet. Wenn Sie den Zeichencode angeben möchten, können Sie ihn nicht verwenden.
try (BufferedReader reader = new BufferedReader(new FileReader(file));){
    String str;
    List<String> lines = new ArrayList<>();
    while ((str = reader.readLine()) != null) {
        lines.add(str);
    }
} catch (IOException e) {
    e.printStackTrace();
}
  1. Verwenden Sie FileInputStream. Dies ist die Methode, die verwendet wird, wenn der Zeichencode auf herkömmliche Weise verwendet wird. Lesen Sie die Datei mit FileInputStream und geben Sie den Zeichencode mit InputStreamReader an. Wickeln Sie es dann in BufferedReader ein.
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));){
    String str;
    List<String> lines = new ArrayList<>();
    while ((str = reader.readLine()) != null) {
        lines.add(str);
    }
} catch (IOException e) {
    e.printStackTrace();
}
  1. Verwenden Sie Files.readAllLines. Eine von Java8 hinzugefügte Funktion, die alle Zeilen der Datei als Stream zurückgibt. Die Werte werden im Beendigungsprozess aufgelistet.
try {
    List<String> lines = Files.lines(path, StandardCharsets.UTF_8).collect(Collectors.toList());
} catch (IOException e) {
    e.printStackTrace();
}

Ich habe versucht zu rennen

Ich habe versucht, es mit der folgenden Quelle auszuführen TestFile ist eine Textdatei mit 200.000 Zeilen.

private static final String PATH = "src/test/java/com/test/common/TestFile";

public static void main(String[] args) {
    Path path = Paths.get(PATH);
    File file = path.toFile();
    // Files.ReadAllLines-Messung
    Runnable test1 = () -> {
        try {
            List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
    };

    //BufferedReader Messung von FileReader
    Runnable test2 = () -> {
        try (BufferedReader reader = new BufferedReader(new FileReader(file));){
            String str;
            List<String> lines = new ArrayList<>();
            while ((str = reader.readLine()) != null) {
                lines.add(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    };

    //BufferedReader InputStreamReader FileInputStream-Messung
    Runnable test3 = () -> {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));){
            String str;
            List<String> lines = new ArrayList<>();
            while ((str = reader.readLine()) != null) {
                lines.add(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    };

    // Files.ReadAllLines-Messung
    Runnable test4 = () -> {
        try {
            List<String> lines = Files.lines(path, StandardCharsets.UTF_8).collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }
    };


    calcFuncTime(test1);
    calcFuncTime(test2);
    calcFuncTime(test3);
    calcFuncTime(test4);
}

/**
 *Messzeit
 * @param runnable
 */
private static void calcFuncTime(Runnable runnable) {
    long start = System.nanoTime();
    runnable.run();
    long end = System.nanoTime();
    System.out.println(end - start);
}

Ausführungsergebnis


101206619
178792154
53933069
102386121

Was ist das Beste

Bei der Überprüfung der Ausführungsergebnisse war der langsamste Fall der zweite und der früheste der dritte Fall. Der Unterschied beträgt jedoch ungefähr 0,1 Sekunden. Wenn es also einen Unterschied von ungefähr 200.000 Zeilen gibt, müssen Sie sich meiner Meinung nach keine Sorgen machen. Persönlich empfehle ich die Verwendung von FileReader nicht, da Sie keine Zeichencodes verwenden können und langsam sind. Die Methode mit FileInputStream ist die schnellste, aber da die Beschreibung groß ist, ist die Methode mit Files wahrscheinlich die beste. Bitte entschuldige mich.

Recommended Posts

Was ist das beste Lesen von Dateien (Java)
Was ist java
Was ist Java <>?
Was ist java
Was ist die Hauptmethode in Java?
Was ist Java-Technologie?
Was ist Java API-Java?
[Java] Was ist flatMap?
[Java] Was ist ArrayList?
Was ist das Java Servlet / JSP MVC-Modell?
Was ist der flüchtige Modifikator für Java-Variablen?
Was ist Java Assertion? Zusammenfassung.
Die Migrationsdatei wird dupliziert
Was ist die BufferedReader-Klasse?
Was ist eine JAR-Datei?
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Was ist eine Java-Sammlung?
[Java] Was ist jaee j2ee?
[Java] Was ist Klassenvererbung?
Wofür ist der Konstruktor?
[Java-Grundlagen] Was ist Klasse?
Was ist Java-Fluchtanalyse?
5. Tag von Java
Was ist die Initialisierungsmethode?
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
Was ist JVM (Java Virtual Machine)?
'% 02d' Was ist der% von% 2?
Wo ist die Zeitzone von Javas LocalDateTime.now ()?
Entpacken Sie die Zip-Datei in Java
Was ist Thread-sicher (mit Java)
[Java] Was ist die Ausnahme für gleichzeitige Änderungen?
Was ist ein Lambda-Ausdruck (Java)
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
Was ist eine Klasse in der Java-Sprache (3 /?)
Was ist eine Spring Boot-Originaldatei?
Was ist der beste Migrationsdatentyp? ??
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist Java und Entwicklungsumgebung (MAC)
Was ist eine Klasse in der Java-Sprache (2 /?)
Was sind die aktualisierten Funktionen von Java 13
Wie ist die Datenstruktur von ActionText?
Die Java EE Security API ist da!
Wofür ist das Fassadenmuster nützlich?
Java: Platzieren Sie die ResourceBundle-Eigenschaftendatei an einer beliebigen Stelle
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei
Java vs. JavaScript: Was ist der Unterschied?
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
Was ist CHECKSTYLE: OFF in der Java-Quelle? Checkstyle zu wissen von
Was ist JSP? ~ Lassen Sie uns die Grundlagen von JSP kennen !! ~
Was ist Cubby?
JAVA: jar, aar, zeige den Inhalt der Datei an
Was den Java-Shop überraschte, als er PHP schrieb
Was ist Maven?
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Ruby-Version wird in der .rbenv / version-Datei verwaltet
Was ist Jackson?