Format de données et choix des méthodes de lecture et d’écriture

Adobe AIR 1.0 et les versions ultérieures

Tout fichier est un ensemble d’octets sur disque. Dans ActionScript, les données d’un fichier peuvent toujours être représentées sous la forme d’un objet ByteArray. Par exemple, le code suivant lit les données d’un fichier et les insère dans un objet ByteArray nommé 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 même, le code suivant écrit les données de l’objet ByteArray bytes dans un fichier :

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

Cependant, vous souhaitez rarement stocker les données dans un objet ByteArray ActionScript. Les fichiers de données sont souvent dans un format de fichier spécifique.

Il se peut par exemple que les données du fichier soient au format texte et que vous souhaitiez les représenter dans un objet String.

C’est pourquoi la classe FileStream comprend des méthodes de lecture et d’écriture de données de types autres que les objets ByteArray. Par exemple, la méthode readMultiByte() permet de lire des données dans un fichier et de les stocker dans une chaîne, comme l’illustre le code suivant :

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

Le deuxième paramètre de la méthode readMultiByte() spécifie le format texte utilisé par ActionScript pour interpréter les données (« iso-8859-1 », en l’occurrence). Adobe AIR prend en charge les encodages de jeux de caractères standard (voir Jeux de caractères pris en charge ).

La classe FileStream comprend également la méthode readUTFBytes() , qui lit des données de la mémoire tampon de lecture et les insère dans une chaîne à l’aide du jeu de caractères UTF-8. Les caractères du jeu de caractères UTF-8 sont de longueur variable. N’utilisez donc pas readUTFBytes() dans une méthode répondant à l’événement progress car les données situées à la fin de la mémoire tampon de lecture sont susceptibles de représenter un caractère incomplet. (Cette règle s’applique également à l’utilisation de la méthode readMultiByte() avec un codage de caractères de longueur variable.) Lorsque l’objet FileStream distribue l’événement progress , vous devez donc lire l’ensemble complet de données.

Vous disposez également de méthodes d’écriture similaires, writeMultiByte() et writeUTFBytes() , pour manipuler les objets String et les fichiers de texte.

Les méthodes readUTF() et writeUTF() (à ne pas confondre avec readUTFBytes() et writeUTFBytes() ) permettent également la lecture ou l’écriture de données dans un fichier, mais elles considèrent comme acquis que des données indiquant la longueur des données texte précèdent ces dernières, ce qui n’est pas une pratique courante dans les fichiers de texte standard.

Certains fichiers de texte UTF commencent par un caractère « UTF-BOM » (de l’anglais Byte Order Mark) qui définit le boutisme, ainsi que le format de codage (UTF-16 ou UTF-32).

Vous trouverez un exemple de lecture et d’écriture dans un fichier de texte à la section Exemple : Lecture et insertion d’un fichier XML dans un objet XML .

Les méthodes readObject() et writeObject() facilitent le stockage et la récupération de données pour les objets ActionScript complexes. Les données sont codées au format AMF (ActionScript Message Format). Adobe AIR, Flash Player, Flash Media Server et Flex Data Services comprennent des API permettant de manipuler les données dans ce format.

Il existe d’autres méthodes de lecture et d’écriture, notamment readDouble() et writeDouble() . Cependant si vous les utilisez, assurez-vous que le format de fichier correspond au format des données définies par ces méthodes.

Les formats de fichier sont souvent plus complexes que de simples formats de texte. Par exemple, un fichier MP3 contient des données compressées qui peuvent uniquement être interprétées par le biais des algorithmes de décompression et de décodage spécifiques à ce format. Les fichiers MP3 peuvent également comprendre des balises ID3 qui contiennent des informations de métabalise concernant le fichier (tel que le titre et l’interprète d’une chanson). Il existe plusieurs versions du format ID3, mais le plus simple (ID3 version 1) est présenté à la section Exemple : Lecture et écriture de données en mode aléatoire .

D’autres formats de fichier (pour les images, bases de données, documents d’application, etc.) ont une structure de données différente. Vous devez comprendre celle-ci pour pouvoir les utiliser dans ActionScript.