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.