Асинхронное программирование и события, генерируемые асинхронно открытым объектом 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 доставляется после записи в файл последнего байта и закрытия указанного файла.