Programación asíncrona y eventos generados por un objeto FileStream abierto de forma asíncrona

Adobe AIR 1.0 y posterior

Cuando se abre un archivo de forma asíncrona (con el método openAsync() ), la lectura y escritura de los archivos se realiza de modo asíncrono. Puede ejecutarse otros códigos ActionScript a medida que se leen datos para ponerlos en el búfer de lectura y se escriben los datos de salida.

Ello significa que hay que registrarse para los eventos generados por el objeto FileStream que se abren de forma asíncrona.

Al registrarse para el evento progress , se puede notificar al usuario a medida que se disponen de nuevos datos para la lectura, como en el código siguiente:

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

Para leer la totalidad de los datos, regístrese para el evento complete , como en el código siguiente:

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 modo muy similar a lo que sucede con los datos de entrada que pasan al búfer para permitir la lectura asíncrona, los datos que se escriben en una secuencia asíncrona pasan a un búfer para escribirse de forma asíncrona en el archivo. A medida que se escriben los datos en un archivo, el objeto FileStream distribuye periódicamente un objeto OutputProgressEvent . Un objeto OutputProgressEvent incluye una propiedad bytesPending que se ajusta a la cantidad de bytes que quedan por escribir. Puede registrarse para el evento outputProgress para que se le notifique el momento en que se escriba el contenido del búfer en el archivo, lo que permitirá presentar un cuadro de diálogo del progreso, por ejemplo, pero en general no es necesario. En especial, puede llamar al método close() sin preocuparse por los bytes sin escribir. El objeto FileStream seguirá escribiendo datos y el evento close se entregará cuando se haya escrito el byte final en el archivo y se haya cerrado el archivo subyacente.