Każdy plik jest zestawem bajtów na dysku. W języku ActionScript dane z pliku mogą być zawsze reprezentowane przez obiekt ByteArray. Przykład: poniższy kod odczytuje dane z pliku do obiektu ByteArray o nazwie
bytes
:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completeHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var bytes:ByteArray = new ByteArray();
function completeHandler(event:Event):void
{
myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable);
}
I podobnie: poniższy kod zapisuje dane z obiektu ByteArray (o nazwie
bytes
) do pliku:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.WRITE);
myFileStream.writeBytes(bytes, 0, bytes.length);
Jednak często zdarza się, że zapisywanie danych w obiekcie ByteArray języka ActionScript nie jest pożądane. I często dane są w określonym formacie.
Na przykład: dane pliku mogą być w formacie pliku tekstowego i konieczne może być reprezentowanie takich danych w obiekcie String.
Z tego powodu klasa FileStream zawiera metody read i write przeznaczone do odczytu i zapisu danych do/z obiektów innych niż ByteArray. Na przykład: metoda
readMultiByte()
umożliwia odczyt danych z pliku oraz zapis danych w postaci ciągu znaków, jak w poniższym kodzie:
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");
}
Drugi parametr metody
readMultiByte()
określa format tekstowy, z którego korzysta język ActionScript w celu interpretacji danych (w tym przykładzie „iso-8859-1”). Środowisko Adobe AIR obsługuje typowe standardy kodowania zestawów znaków (zobacz
Obsługiwane zestawy znaków
).
Klasa FileStream zawiera również metodę
readUTFBytes()
, która wczytuje dane z buforu odczytu do ciągu znaków, wykorzystując zestaw znaków UTF-8. Znaki w zestawie znaków UTF-8 mają różną długość, dlatego nie należy używać metody
readUTFBytes()
w metodzie, która reaguje na zdarzenie
progress
, ponieważ dane na końcu buforu odczytu mogą reprezentować niepełny znak. (To obowiązuje również w przypadku zastosowania metody
readMultiByte()
z kodowaniem znaków o różnej długości). Z tego powodu należy odczytać cały zestaw danych, gdy obiekt FileStream wywoła zdarzenie
complete
.
Istnieją również podobne metody zapisu:
writeMultiByte()
i
writeUTFBytes()
przeznaczone do pracy z obiektami String oraz plikami tekstowymi.
Metody
readUTF()
oraz
writeUTF()
(nie należy ich mylić z metodami
readUTFBytes()
i
writeUTFBytes()
) również odczytują i zapisują dane tekstowe do pliku, ale zakładają, że tekst jest poprzedzony danymi określającymi długość danych tekstowych, co nie jest często stosowane w przypadku standardowych plików tekstowych.
Niektóre pliki tekstowe zapisane w formacie UTF rozpoczynają się od znaku „UTF-BOM” (oznaczenie kolejności danych), który definiuje kolejność bajtów, a także format kodowania (taki jak UTF-16 lub UTF-32).
Przykład odczytu i zapisu pliku tekstowego zawiera sekcja
Przykłady: wczytywanie pliku XML do obiektu XML
.
Metody
readObject()
i
writeObject()
są zawsze wygodnymi sposobami na zapisywanie i pobieranie danych dla złożonych obiektów ActionScript. Dane są zakodowane w formacie AMF (ActionScript Message Format). Oprogramowanie Adobe AIR, Flash Player, Flash Media Server i Flex Data Services zawiera interfejsy API służące do pracy z danymi w tym formacie.
Istnieją również inne metody odczytu i zapisu (takie jak
readDouble()
i
writeDouble()
). Jednak w przypadku korzystania z tych metod należy się upewnić, że format pliku jest zgodny z formatami danych definiowanych przez te metody.
Formaty plików są często bardziej złożone niż proste formaty tekstowe. Na przykład: plik MP3 zawiera skompresowane dane, które mogą być interpretowane za pomocą algorytmów dekompresji i dekodowania, które są właściwe dla plików MP3. Pliki MP3 mogą również zawierać znaczniki ID3, które zawierają informacje o pliku w znacznikach metadanych (np. tytuł i wykonawca utworu). Istnieje wiele wersji formatu ID3, a najprostszy z nich (ID3 w wersji 1) został omówiony w sekcji
Przykład: Odczyt i zapis danych z dostępem losowym
.
Inne formaty plików (dla obrazów, baz danych, dokumentów aplikacji itp.) mają inne struktury, a w celu korzystania z ich danych w języku ActionScript należy poznać strukturę danych.