Пример: чтение и запись данных со случайным доступомAdobe AIR 1.0 и более новых версий MP3-файлы могут содержать теги ID3 — сегменты в начале или в конце файла, хранящие метаинформацию о записи. Существует несколько версий формата тегов ID3. В этом примере показано, как читать и записывать данные в MP3-файл с тегами ID3 самого простого формата (ID3 версии 1.0), используя функцию случайного доступа к данным файла. Это означает, что чтение и запись производятся в произвольные положения в файле. В MP3-файле с тегами ID3 версии 1 данные ID3 содержатся в последних 128 байтах файла. При случайном доступе к файлу для чтения и записи важно указать FileMode.UPDATE в качестве параметра fileMode метода open() или openAsync(): var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3"); var fileStr:FileStream = new FileStream(); fileStr.open(file, FileMode.UPDATE); Это позволит производить как чтение, так и запись в файл. Когда файл открыт, с помощью свойства position можно указать положение за 128 байт до конца файла: fileStr.position = file.size - 128; В этом коде свойство position указывает на это положение в файле, так как формат ID3 версии 1.0 подразумевает, что теги ID3 хранятся в последних 128 байтах файла. Кроме того, в спецификации выдвигается еще ряд требований. Они приведены ниже:
Метод id3TagRead() проверяет данные после чтения (после события 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); } } Точно также можно осуществлять случайный доступ для записи в файл. Например, можно разобрать переменную id3Title, чтобы проверить, правильный ли используется регистр (с помощью методов класса String), а затем записать в файл измененную строку с названием newTitle, как показано ниже: fileStr.position = file.length - 125; // 128 - 3 fileStr.writeMultiByte(newTitle, "iso-8859-1"); В соответствии со стандартом ID3 версии 1, длина строки newTitle должна быть 30 символов, и она должна заканчиваться кодом символа 0 (String.fromCharCode(0)). |
|