Dataformat och att välja read- eller write-metod

Adobe AIR 1.0 och senare

Alla filer består av en uppsättning byte på en disk. I ActionScript kan data från en fil alltid representeras som en ByteArray. Följande kod läser data från en fil till ett ByteArray-objekt med namnet bytes :

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

Följande kod skriver på ett liknande sätt data från ett ByteArray-objekt med namnet bytes till en fil:

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

Ofta vill du emellertid inte lagra data i ett ByteArray-objekt i ActionScript. Och ofta är filen i ett visst filformat.

Data i filen kan till exempel vara i ett textfilsformat, och du vill representera sådana data i ett String-objekt.

Därför omfattar klassen FileStream read- och write-metoder för läsning och skrivning av data till och från andra typer än ByteArray-objekt. Med till exempel metoden readMultiByte() kan du läsa data från en fil och lagra den i en sträng, som i följande kod:

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

Den andra parametern för metoden readMultiByte() anger textformatet som ActionScript använder för att tolka data (”iso-8859-1” i exemplet). Adobe AIR stöder kodning med vanliga teckenuppsättningar (se Teckenuppsättningar som stöds ).

Klassen FileStream omfattar också metoden readUTFBytes() , som läser data från läsbufferten till en sträng med hjälp av teckenuppsättningen UTF-8. Eftersom tecknen i teckenuppsättningen UTF-8 har olika längd ska du inte använda readUTFBytes() i en metod som svarar på progress -händelsen, eftersom data i slutet av läsbufferten kan representera ett ofullständigt tecken. (Detta gäller också när du använder metoden readMultiByte() med teckenkodning med variabel längd.) Därför ska du läsa hela datauppsättningen när FileStream-objektet skickar händelsen complete .

Det finns också liknande write-metoder, writeMultiByte() och writeUTFBytes() , med vilka du kan arbeta med String-objekt och textfiler.

Metoderna readUTF() och writeUTF() (som inte ska blandas ihop med readUTFBytes() och writeUTFBytes() ) läser och skriver också textdata till en fil, men de förutsätter att textdata föregås av information som anger längden på textdata, något som är ovanligt i vanliga textfiler.

Vissa UTF-kodade textfiler inleds med ett ”UTF-BOM”-tecken (byteordningsmarkör) som definierar graden av endian samt kodningsformatet (till exempel UTF-16 eller UTF-32).

Ett exempel på hur du läser och skriver till en textfil finns i Exempel: Läsa en XML-fil till ett XML-objekt .

readObject() och writeObject() är praktiska när du vill lagra och hämta data för komplicerade ActionScript-objekt. Data kodas i AMF (ActionScript Message Format). Adobe AIR, Flash Player, Flash Media Server och Flex Data Services innehåller API:er för att arbeta med data i det här formatet.

Det finns några andra read- och write-metoder (till exempel readDouble() och writeDouble() ). Om du använder dessa måste du emellertid se till att filformatet motsvarar formatet på de data som definieras av dessa metoder.

Filformat är ofta mer komplicerade än enkla textformat. En MP3-fil innehåller till exempel komprimerade data som bara kan tolkas med dekomprimerings- och avkodningsalgoritmer som bara gäller för MP3-filer. MP3-filer kan också inkludera ID3-koder som innehåller metatagginformation om filen (till exempel titel och artist för en låt). Det finns flera versioner av ID3-formatet, men den enklaste (ID3 version 1) beskrivs i avsnittet Exempel: Läsa och skriva data med direktåtkomst .

Andra filformat (för bilder, databaser, programdokument och så vidare) har andra strukturer, och för att kunna arbeta med deras data i ActionScript måste du förstå hur dessa data struktureras.