Przykład: Odczyt i zapis danych z dostępem losowym

Adobe AIR 1.0 i starsze wersje

Pliki MP3 mogą zawierać znaczniki ID3, które są sekcjami na początku lub końcu pliku i zawierają metadane identyfikujące nagranie. Format znacznika ID3 ma różne wersje. Niniejszy przykład prezentuje sposób zapisu i odczytu z pliku MP3, który zawiera najprostszy format ID3 (wersja ID3 1.0) korzystający z „losowego dostępu do danych pliku”, co oznacza, że zapis i odczyt odbywa się z/do dowolnych miejsc w pliku.

Plik MP3, który zawiera znacznik ID3 w wersji 1, zawiera dane ID3 na końcu, w ostatnich 128 bajtach.

W przypadku uzyskiwania dostępu do pliku dla losowego odczytu/zapisu należy określić FileMode.UPDATE jako parametr fileMode metody open() lub openAsync() :

var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3"); 
var fileStr:FileStream = new FileStream(); 
fileStr.open(file, FileMode.UPDATE);  

Dzięki temu możliwe będzie odczytywanie i zapisywanie w pliku.

Po otwarciu pliku można ustawić wskaźnik position na pozycję przesuniętą o 128 bajtów przed końcem pliku:

fileStr.position = file.size - 128;

Poniższy kod ustawia właściwość position na tę pozycję w pliku, ponieważ format ID3 v1.0 określa, że dane znacznika ID3 są zapisane w ostatnich 128 bajtach pliku. Specyfikacja określa również następujące zależności:

  • Pierwsze 3 bajty znacznika zawierają ciąg znaków "TAG" .

  • Następne 30 znaków zawiera tytuł ścieżki MP3 w postaci ciągu znaków.

  • Następnie 30 znaków zawiera nazwę wykonawcy w postaci ciągu znaków.

  • Następnie 30 znaków zawiera nazwę albumu w postaci ciągu znaków.

  • Następnie 4 znaki zawierają rok w postaci ciągu znaków.

  • Następnie 30 znaków zawiera komentarz w postaci ciągu znaków.

  • Następny bajt zawiera kod wskazujący gatunek ścieżki.

  • Wszystkie dane tekstowe są w formacie ISO 8859-1.

Metoda id3TagRead() sprawdza dane po jej wczytaniu (po wywołaniu zdarzenia complete ):

function id3TagRead():void 
{ 
    if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i))  
    { 
        var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1"); 
        var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1"); 
        var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1"); 
        var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1"); 
        var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1"); 
        var id3GenreCode:String =  fileStr.readByte().toString(10); 
    } 
} 

Możliwy jest również zapis do pliku z dostępem losowym. Na przykład: możliwe jest przeanalizowanie zmiennej id3Title w celu zapewnienia, że jej znaki są poprawnej wielkości (za pomocą metod klasy String), a następnie zapisanie zmodyfikowanego ciągu znaków (o nazwie newTitle ) do nowego pliku, jak poniżej:

fileStr.position = file.length - 125;    // 128 - 3 
fileStr.writeMultiByte(newTitle, "iso-8859-1");

W celu zapewnienia zgodności ze standardem ID3 w wersji 1 długość ciągu znaków newTitle powinna wynosić 30 znaków, a koniec ciągu należy uzupełnić znakiem o kodzie 0 ( String.fromCharCode(0) ).