Asynchroniczne programowanie oraz zdarzenia wygenerowane przez obiekt FileStream otwarty asynchronicznie

Adobe AIR 1.0 i starsze wersje

Jeśli plik został otwarty asynchronicznie (za pomocą metody openAsync() ), wówczas odczyt i zapis plików odbywa się asynchronicznie. W miarę wczytywania danych do buforu odczytu oraz zapisywania danych wyjściowych możliwe jest wykonywanie innego kodu ActionScript.

To oznacza, że konieczne jest zarejestrowanie dla zdarzeń wygenerowanych przez obiekt FileStream otwarty asynchronicznie.

Zarejestrowanie dla zdarzenia progress sprawia, że użytkownik może być powiadamiany w miarę udostępniania nowych danych dla odczytu, jak w poniższym kodzie:

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

Możliwe jest odczytanie wszystkich danych poprzez zarejestrowanie zdarzenia complete , jak w poniższym przykładzie:

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

W bardzo podobny sposób dane wejściowe są buforowane, co umożliwia odczyt asynchroniczny — dane zapisywane w strumieniu asynchronicznym są buforowane i zapisywane do pliku w sposób asynchroniczny. W miarę zapisywania danych do pliku obiekt FileStream okresowo wywołuje obiekt OutputProgressEvent . Obiekt OutputProgressEvent zawiera właściwość bytesPending , która jest ustawiona na liczbę bajtów pozostałych do zapisania. Użytkownik może zarejestrować się dla zdarzenia outputProgress , dzięki czemu będzie powiadamiany w miarę zapisywania buforu do pliku — być może w celu wyświetlenia okna dialogowego postępu. Jednak zwykle nie jest to konieczne. Możliwe jest wywołanie metody close() bez konieczności sprawdzania niezapisanych bajtów. Obiekt FileStream będzie kontynuował zapisywanie danych, a zdarzenie close zostanie wygenerowane po zapisaniu ostatniego bajtu do pliku i zamknięciu pliku.