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