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.