Programmation asynchrone et événements générés par un objet FileStream ouvert en mode asynchrone

Adobe AIR 1.0 et les versions ultérieures

Lorsqu’un fichier est ouvert en mode asynchrone (à l’aide de la méthode openAsync() ), la lecture et l’écriture de fichiers sont asynchrones. Un autre code ActionScript peut s’exécuter au fur et à mesure de l’insertion de données dans la mémoire tampon de lecture et de l’écriture de données de sortie.

Vous devez donc vous enregistrer pour les événements générés par l’objet FileStream ouvert en mode asynchrone.

En vous enregistrant pour l’événement progress , vous pouvez être averti dès que de nouvelles données sont disponibles à des fins de lecture, comme l’illustre le code suivant :

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"); 
} 

Vous pouvez lire la totalité des données en vous enregistrant pour l’événement complete , comme l’illustre le code suivant :

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"); 
} 

De même que des données en entrée sont mises en mémoire tampon à des fins de lecture asynchrone, les données que vous écrivez dans un flux asynchrone sont mises en mémoire tampon et écrites dans le fichier de manière asynchrone. Alors que des données sont écrites dans un fichier, l’objet FileStream distribue régulièrement un objet OutputProgressEvent . Un objet OutputProgressEvent comprend une propriété bytesPending définie sur le nombre d’octets restants à écrire. Vous pouvez vous enregistrer pour l’événement outputProgress afin d’être averti lorsque cette mémoire tampon est écrite dans le fichier, peut-être pour afficher une boîte de dialogue de progression. Toutefois, cette opération n’est généralement pas nécessaire. Vous pouvez notamment appeler la méthode close() sans vous soucier des octets non écrits. L’objet FileStream continue d’écrire des données et l’événement close est envoyé une fois le dernier octet écrit dans le fichier et le fichier sous-jacent fermé.