数据格式以及选择要使用的读取和写入方法

Adobe AIR 1.0 和更高版本

每个文件是磁盘上的一组字节。在 ActionScript 中,文件中的数据始终可以表示为 ByteArray。例如,以下代码将文件中的数据读入到名为 bytes 的 ByteArray 对象中:

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); 
} 

同样,以下代码将名为 bytes 的 ByteArray 中的数据写入文件:

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); 

不过,通常您不希望在 ActionScript ByteArray 对象中存储数据,并且数据文件通常是指定的文件格式。

例如,文件中的数据可能是文本文件格式,您可能希望在 String 对象中表示这种数据。

因此,FileStream 类包括读取和写入方法,用于读取和写入除 ByteArray 对象以外的类型的数据。例如,使用 readMultiByte() 方法可以从文件中读取数据,然后将它存储到字符串,如以下代码中所示:

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"); 
} 

readMultiByte() 方法的第二个参数指定 ActionScript 用来解释数据的文本格式(在示例中是“iso-8859-1”)。Adobe AIR 支持常见的字符集编码(请参阅支持的字符集)。

FileStream 类还包括 readUTFBytes() 方法,该方法使用 UTF-8 字符集将读取缓冲区中的数据读入一个字符串中。由于 UTF-8 字符集中字符的长度是可变的,请不要在响应 progress 事件的方法中使用 readUTFBytes(),这是因为读取缓冲区结尾的数据可能表示不完整的字符。(将 readMultiByte() 方法用于可变长度字符编码时,需同样遵循上述要求。)因此,当 FileStream 对象调度 complete 事件时,应读取整个数据集。

还有类似的写入方法 writeMultiByte()writeUTFBytes() 可用于 String 对象和文本文件。

readUTF()writeUTF() 方法(请不要与 readUTFBytes()writeUTFBytes() 相混淆)也可以从文件读取文本数据和将文本数据写入文件,不过它们假定文本数据前面有指定文本数据长度的数据(此方式在标准文本文件中不常见)。

有些 UTF 编码的文本文件以“UTF-BOM”(字节顺序标记)字符开头,该字符定义字节顺序以及编码格式(如 UTF-16 或 UTF-32)。

有关读取和写入文本文件的示例,请参阅示例:将 XML 文件读取到 XML 对象中

使用 readObject()writeObject() 可以很方便地存储和检索复杂 ActionScript 对象的数据。数据采用 AMF (ActionScript Message Format) 编码。Adobe AIR、Flash Player、Flash Media Server 和 Flex Data Services 包括用于此格式数据的 API。

还有一些其他读取和写入方法(如 readDouble()writeDouble())。不过,如果您使用这些方法,请确保文件格式与这些方法定义的数据的格式相匹配。

文件格式通常比简单文本格式复杂。例如,MP3 文件包括压缩的数据,这些数据只能使用特定于 MP3 文件的解压缩和解码算法解释。MP3 文件还可能包括 ID3 标签,这些标签包含有关文件的元标签信息(如歌曲的标题和艺术家)。ID3 格式有多种版本,不过最简单的版本(ID3 第 1 版)在示例:使用随机访问读取和写入数据部分中进行了介绍。

其他文件格式(用于图像、数据库、应用程序文档等)具有不同的结构,若要在 ActionScript 中使用这些格式的数据,必须了解数据的构造方式。