Programmazione asincrona ed eventi generati da un oggetto FileStream aperto in modo asincrono

Adobe AIR 1.0 e versioni successive

Quando un file viene aperto in modo asincrono (mediante il metodo openAsync() ), i file di lettura e scrittura vengono eseguiti in modo asincrono. Durante la lettura dei dati nel buffer di lettura e la scrittura dei dati in uscita, è possibile eseguire altro codice ActionScript.

Ciò significa che è necessario eseguire la registrazione per gli eventi generati dall'oggetto FileStream aperto in modo asincrono.

Con la registrazione per l'evento progress , è possibile notificare quando i nuovi dati vengono resi disponibili per la lettura come nel codice seguente:

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

È possibile leggere tutti i dati registrando per l'evento complete come nel codice seguente:

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

Quasi contemporaneamente alla bufferizzazione dei dati in entrata per consentire la lettura asincrona, i dati scritti in uno streaming asincrono vengono bufferizzati e scritti nel file in modo asincrono. Durante la scrittura dei dati in un file, l'oggetto FileStream invia periodicamente un oggetto OutputProgressEvent . Un oggetto OutputProgressEvent comprende una proprietà bytesPending impostata sul numero di byte residui da scrivere. È possibile registrare per l'evento outputProgress da notificare mentre il buffer viene effettivamente scritto nel file, probabilmente in ordine di visualizzazione della finestra di dialogo di avanzamento. Tuttavia, in generale, non è necessario eseguire tale operazione. In particolare, è possibile chiamare il metodo close() senza preoccuparsi dei byte non scritti. L'oggetto FileStream continuerà a scrivere dati e l'evento close verrà distribuito dopo che il byte finale viene scritto nel file e quello sottostante viene chiuso.