示例:使用随机访问读取和写入数据Adobe AIR 1.0 和更高版本 MP3 文件可以包括 ID3 标签,这种标签是位于文件开头或结尾、包含用于标识录制情况的元数据的部分。ID3 标签格式本身具有不同的修订版本。此例描述如何使用“随机访问文件数据”从包含最简单的 ID3 格式(ID3 1.0 版)的 MP3 文件读取和写入,“随机访问文件数据”表示它在文件中任意位置进行读取和写入。 包含 ID3 第 1 版标签的 MP3 文件在文件结尾最后 128 个字节中包括 ID3 数据。 当访问文件以进行随机读取/写入访问时,将 FileMode.UPDATE 指定为 open() 或 openAsync() 方法的 fileMode 参数很重要。 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 个字节中。该规范还包含以下内容:
当读取数据后(在调度 complete 事件时),id3TagRead() 方法将检查数据: 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)) 填充。 |
|