Große Dateien als Stream verarbeiten
Verarbeiten Sie Dateien Block für Block
Große Dateien als Stream verarbeiten ist eine kostenlose Dart Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Dart Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum nicht alles auf einmal lesen
readAsString lädt die gesamte Datei in den Speicher. Bei einem riesigen Log oder Video kann das Ihr Programm zum Absturz bringen. Verwenden Sie stattdessen einen Stream.
Einen Lesestream öffnen
Rufen Sie openRead für eine File auf, um einen Stream mit Byte-Blöcken zu erhalten. Verarbeiten Sie jeden Block und geben Sie die alten Blöcke wieder frei.
final stream = File('big.log').openRead();Die Blöcke durchlaufen
Verwenden Sie await for, um jeden Block beim Eintreffen zu empfangen. Der Speicherbedarf bleibt unabhängig von der Dateigröße konstant.
await for (final chunk in stream) { use(chunk); }Bytes müssen decodiert werden
Jeder Block besteht aus unverarbeiteten Bytes. Um Text zu lesen, leiten Sie den Stream durch utf8.decoder, damit Sie stattdessen String-Teile erhalten.
stream.transform(utf8.decoder);In Zeilen aufteilen
Verketten Sie LineSplitter nach dem Decoder. Dann gibt der Stream jeweils eine saubere Zeile aus, die sofort verarbeitet werden kann.
stream.transform(utf8.decoder).transform(LineSplitter());Zeilen effizient zählen
Jetzt ist das Zählen der Zeilen einer Millionenzeilen-Datei trivial und ressourcenschonend. Erhöhen Sie den Zähler innerhalb der Schleife, ohne jemals die gesamte Datei im Speicher zu halten.
var n = 0; await for (final l in lines) n++;Einen Schreibstream öffnen
Sie schreiben große Ausgabemengen? openWrite gibt einen IOSink zurück, den Sie nach und nach mit Daten versorgen, während diese auf die Festplatte geschrieben werden.
final sink = File('out.txt').openWrite();Den Sink mit Daten versorgen
Senden Sie Text innerhalb einer Schleife mit sink.write oder sink.writeln. Jeder Aufruf streamt weitere Daten, ohne einen riesigen String neu aufzubauen.
for (final row in rows) sink.writeln(row);Den Sink immer schließen
Rufen Sie nach Abschluss close auf und warten Sie mit await darauf. Dadurch werden die letzten Bytes geschrieben und der Dateihandle sauber freigegeben.
await sink.close();Stream in einen Sink leiten
Um eine Datei effizient zu kopieren, leiten Sie einen Lesestream mit pipe direkt in einen Schreib-Sink. Dart kümmert sich für Sie um Backpressure.
await source.openRead().pipe(target.openWrite());Stream-Fehler behandeln
Streams können während der Verarbeitung fehlschlagen. Umschließen Sie die Schleife mit try/catch, damit ein Lesefehler Ihre Ergebnisse nicht unbemerkt beschädigt.
try { await for (final c in stream) {} } catch (e) {}Kurze Überprüfung
Sie müssen ein 5-GB-Log auf einem leistungsschwachen Rechner verarbeiten. Welcher Ansatz ist der richtige?
Zusammenfassung
Sie streamen nun Lesevorgänge mit openRead, decodieren Daten und teilen sie in Zeilen auf, schreiben schrittweise über einen IOSink und verwenden pipe für schnelle Kopien.
Häufig gestellte Fragen
Ist die Lektion „Große Dateien als Stream verarbeiten“ kostenlos?
Ja — der vollständige Text von „Große Dateien als Stream verarbeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Dart Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Große Dateien als Stream verarbeiten“?
Verarbeiten Sie Dateien Block für Block Du übst Dart Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Dart Academy zu starten?
Keine Vorkenntnisse erforderlich. Dart Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Große Dateien als Stream verarbeiten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Dart Academy-Lektion Code schreiben und ausführen?
Ja. Jede Dart Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Dateien lesen und schreiben
- Verzeichnisse, Pfade und FileSystemEntity
- Große Dateien als Stream verarbeiten
- Stdin, Stdout und Prozessargumente