資料格式,以及選擇要使用的讀取和寫入方法

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 中使用這些格式的資料,您必須了解資料結構的建立方式。