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.