Programação assíncrona e eventos gerados por um objeto FileStream aberto assincronicamente

Adobe AIR 1.0 e posterior

Quando um arquivo for aberto de modo assíncrono (usando o método openAsync() ), os arquivos de leitura e gravação serão executados de modo assíncrono. À medida que os dados são lidos no buffer de leitura e os dados de saída começam a ser gravados, outro código ActionScript pode ser executado.

Isso significa que é necessário se registrar para eventos gerados pelo objeto FileStream abertos de modo assíncrono.

Registrando-se para o evento progress , você poderá ser notificado quando novos dados se tornarem disponíveis para leitura, como no seguinte código:

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

Você pode fazer a leitura de todos os dados se registrando para o evento complete , como no seguinte código:

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

Da mesma maneira que os dados de entrada são colocados em buffer para permitir a leitura assíncrona, os dados que você grava em um fluxo assíncrono são colocados em buffer e gravados no arquivo de forma assíncrona. À medida que os dados são gravados em um arquivo, o objeto FileStream despacha periodicamente o objeto OutputProgressEvent . O objeto OutputProgressEvent inclui a propriedade bytesPending definida pelo número de bytes restantes para gravação. Você pode registrar para que o evento outputProgress seja notificado, já que esse buffer é, na realidade, gravado no arquivo, talvez para exibir uma caixa de diálogo de progresso. No entanto, isso geralmente não é necessário. Especificamente, você pode chamar o método close() sem se importar com os bytes não gravados. O objeto FileStream continuará gravando dados e o evento close será entregue após o byte final ser gravado no arquivo e o arquivo subjacente ser fechado.