Dart -- readAsString und readAsLines
In diesem Blog habe ich in der Vergangenheit schon Posts über Dateioperation in Dart geschrieben. Aber um das Wissen aufzufrischen, ist es nie verkehrt sich das Thema noch einmal anzusehen.
Wichtig dabei sind die Begriffe synchron und asynchron. Nehmen wir an, wir schreiben eine Funktion und diese gibt ein Ergebnis zurück. Nur gibt sie dieses Ergebnis nicht sofort zurück, sondern wir wissen eigentlich nicht genau, wie lange es dauern wird, bis wir das Ergebnis erhalten. Beispiel: Wenn wir ein kleines File komplett einlesen, dürfte das schneller gehen, als bei einer sehr großen Datei.
Wenn wir darauf warten, bis das File komplett eingelesen ist, programmieren wir synchron.
Wir blockieren das Programm, bis die File-Operation abgeschlossen ist.
Wenn wir NICHT darauf warten, bis das File komplett eingelesen ist, programmieren wir asynchron. Die nächsten Befehle in unserem Code werden ausgeführt.
In diesem Kontext ist auch Future zu verstehen. Eine Variable die so deklariert wird, erhält ein asynchrones Objekt zugeteilt.
Für die Code Beispiele verwenden wir Visual Studio Code und ein Textfile, das sich im gleichen Ordner befindet, wie Ihre Dart Datei. Beispiel Code:
import 'dart:io'; File datei; Future<String> inhalt; void main(List<String> arguments) { datei = File('meinFile.txt'); // 1 inhalt = datei.readAsString(); // 2 inhalt.then((c) => print(c)); // 3 }
.readAsLines(..)
import 'dart:io'; File datei; Future<List<String>> inhalt; // 1 LinienVerarbeiten(inhalt) { //2 for (var linie in inhalt) { print(linie); } } void main(List<String> arguments) { datei = File('meinFile.txt'); inhalt = datei.readAsLines().then((value) => LinienVerarbeiten(value)); //3 }
Kommentare
Kommentar veröffentlichen