Formaty danych oraz wybór metod odczytu i zapisu

Adobe AIR 1.0 i starsze wersje

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.