Gegevensindelingen, en de methode voor lezen en schrijven kiezen

Adobe AIR 1.0 of hoger

Elk bestand bestaat uit een set bytes op een schijf. In ActionScript kunnen de gegevens van een bestand altijd worden weergegeven als een bytearray. De volgende code leest bijvoorbeeld de gegevens van het bestand in een ByteArray-object met de naam 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); 
} 

De volgende code schrijft gegevens van een ByteArray-object met de naam bytes naar een bestand:

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

Het zal echter vaak gebeuren dat u de gegevens niet wilt opslaan in een ActionScript ByteArray-object. Het gegevensbestand heeft ook vaak een specifieke bestandsindeling.

De gegevens in het bestand kunnen bijvoorbeeld een tekstindeling hebben; u kunt zulke gegevens weergeven in een String-object.

Om deze reden omvat de klasse FileStream lees- en schrijfmethoden voor het lezen en schrijven van gegevens van en naar andere typen dan ByteArray-objecten. Met de methode readMultiByte() kunt u bijvoorbeeld gegevens lezen uit een bestand en opslaan in een tekenreeks, zoals in de volgende code:

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

De tweede parameter van de methode readMultiByte() geeft de tekstindeling aan die ActionScript gebruikt om de gegevens te interpreteren (in het voorbeeld "iso-8859-1"). Adobe AIR biedt ondersteuning voor coderingen van veelvoorkomende tekensets (zie Ondersteunde tekensets ).

De klasse FileStream bevat ook de methode readUTFBytes() , die gegevens uit de leesbuffer in een tekenreeks inleest met gebruikmaking van de tekenset UTF-8. Aangezien tekens in de tekenset UTF-8 een variabele lengte hebben, kunt u readUTFBytes() niet gebruiken in een methode die reageert op de gebeurtenis progress , aangezien de gegevens aan het einde van de leesbuffer een onvolledig teken kunnen vertegenwoordigen. (Dit geldt ook wanneer u de methode readMultiByte() gebruikt met een tekencodering met variabele lengte.) Om deze reden moet de gehele set gegevens worden gelezen wanneer het FileStream-object de gebeurtenis complete verzendt.

Er zijn ook vergelijkbare schrijfmethoden, writeMultiByte() en writeUTFBytes() , voor het werken met String-objecten en tekstbestanden.

Ook de methoden readUTF() en writeUTF() (niet te verwarren met readUTFBytes() en writeUTFBytes() ) lezen en schrijven de tekstgegevens naar een bestand, maar bij deze methoden wordt ervan uitgegaan dat de tekstgegevens worden voorafgegaan door gegevens waarmee de lengte van de tekstgegevens wordt aangegeven. Dit is niet gebruikelijk bij standaard tekstbestanden.

Bepaalde UTF-gecodeerde tekstbestanden beginnen met het teken "UTF-BOM" (byte order mark) dat de Endianness en het coderingsformaat (zoals UTF-16 of UTF-32) aangeeft.

Zie Voorbeeld: Een XML-bestand lezen in een XML-object voor een voorbeeld van het lezen en schrijven naar een tekstbestand.

readObject() en writeObject() zijn handige manieren om gegevens op te slaan en op te halen voor complexe ActionScript-objecten. De gegevens worden gecodeerd in AMF (ActionScript Message Format). Adobe AIR, Flash Player, Flash Media Server en Flex Data Services bevatten API's voor het werken met gegevens in dit formaat.

Er zijn een paar andere lees- en schrijfmethoden (zoals readDouble() en writeDouble() ). Als u deze gebruikt, moet u er zeker van zijn dat de bestandsindeling overeenkomt met de indeling van de gegevens die worden gedefinieerd door deze methoden.

Bestandsindelingen zijn vaak complexer dan eenvoudige tekstindelingen. Een MP3-bestand bevat bijvoorbeeld gecomprimeerde gegevens die alleen kunnen worden geïnterpreteerd met behulp van de decompressie- en decoderingsalgoritmen die specifiek zijn voor MP3-bestanden. MP3-bestanden kunnen ook ID3-tags bevatten die metatag-informatie over het bestand bevatten (bijvoorbeeld de titel en de artiest van een nummer). Er zijn meerdere versies van de ID3-indeling. De eenvoudigste (ID3 versie 1) wordt besproken in de sectie Voorbeeld: Gegevens lezen en schrijven met willekeurige toegang .

Andere bestandsindelingen (voor afbeeldingen, databases, toepassingsdocumenten enzovoort) hebben andere structuren. Als u met deze gegevens wilt werken in ActionScript, moet u begrijpen hoe de gegevens zijn gestructureerd.