Асинхронное программирование и события, генерируемые асинхронно открытым объектом FileStream

Adobe AIR 1.0 и более новых версий

Если файл открыт асинхронно (с помощью метода openAsync()), то чтение и запись также производятся асинхронно. Во время считывания данных в буфер чтения и записи выходных данных может выполняться другой код ActionScript.

Это означает, что необходимо зарегистрировать прослушиватели для событий, генерируемых асинхронно открытым объектом FileStream.

При регистрации на событие progress, когда новые данные будут доступны для чтения, отправляется уведомление, как показано ниже:

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

Все данные можно считать, зарегистрировав прослушиватели событий complete, как показано ниже:

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

Примерно таким же образом, каким входные данные помещаются в буфер для асинхронного чтения, данные, записываемые в асинхронном потоке, помещаются в буфер и асинхронно записываются в файл. По мере записи данных в файл объект FileStream периодически отправляет объект OutputProgressEvent. Объект OutputProgressEvent включает свойство bytesPending, значением которого является количество оставшихся байтов для записи. Можно зарегистрироваться на прослушивание события outputProgress, и тогда, когда буфер будет записан в файл, будет отправлено уведомление (возможно, как раз вовремя, чтобы отобразить диалоговое окно хода операции). Однако это необязательно. В частности, метод close() может вызываться без учета незаписанных байтов. Объект FileStream продолжает запись данных, а событие close доставляется после записи в файл последнего байта и закрытия указанного файла.