Wenn eine Datei asynchron geöffnet wird (mit der Methode
openAsync()
, werden Lese- und Schreibvorgänge in der Datei asynchron ausgeführt. Während die Daten in den Lesepuffer gelesen und Ausgabedaten geschrieben werden, kann gleichzeitig anderer ActionScript-Code ausgeführt werden.
Das bedeutet, dass Sie sich für Ereignisse registrieren müssen, die vom FileStream-Objekt asynchron geöffnet wurden.
Durch die Registrierung beim
progress
-Ereignis kann der Benutzer benachrichtigt werden, wenn für den Lesevorgang neue Daten zur Verfügung stehen. Hier ein Beispiel:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function progressHandler(event:ProgressEvent):void
{
str += myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Sie können alle Daten lesen, wenn Sie sich folgendermaßen beim
complete
-Ereignis registrieren:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function completeHandler(event:Event):void
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Ebenso wie Eingabedaten zur Ermöglichung asynchroner Lesevorgänge gepuffert werden, werden Daten, die Sie in einen asynchronen Stream schreiben, gepuffert und asynchron in die Datei geschrieben. Während Daten in eine Datei geschrieben werden, löst das FileStream-Objekt in regelmäßigen Abständen ein
OutputProgressEvent
-Objekt aus. Ein
OutputProgressEvent
-Objekt besitzt die Eigenschaft
bytesPending
, die auf die Anzahl noch nicht geschriebener Byte gesetzt ist. Um benachrichtigt zu werden, wenn der Puffer tatsächlich in die Datei geschrieben wird, können Sie sich beim
outputProgress
-Ereignis anmelden, eventuell um ein Dialogfeld mit Fortschrittsanzeige einzublenden. Doch in der Regel ist dies nicht notwendig. Insbesondere die Methode
close()
können Sie aufrufen, ohne ungeschriebene Byte berücksichtigen zu müssen. Das FileStream-Objekt wird weiterhin Daten schreiben und das
close
-Ereignis wird ausgeliefert, nachdem das letzte Byte in die Datei geschrieben ist und die zugrundeliegende Datei wird geschlossen.