Asynchrone Programmierung und Ereignisse

Adobe AIR 1.0 und höher

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.