Formaty danych oraz wybór metod odczytu i zapisuAdobe AIR 1.0 i wersje późniejsze 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. |
|