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.