Formatos de datos y elección de los métodos de lectura y escritura

Adobe AIR 1.0 y posterior

Cada archivo es un grupo de bytes en un disco. En ActionScript, los datos de un archivo pueden siempre representarse como un conjunto de bytes (ByteArray). En el siguiente ejemplo el código lee los datos de un archivo para ponerlos en un objeto ByteArray denominado 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); 
} 

Asimismo, el código siguiente escribe los datos de ByteArray denominado bytes en un archivo:

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

Sin embargo, con frecuencia no se desea guardar los datos en un objeto ByteArray de ActionScript. Y sucede con frecuencia que el archivo de datos tiene un formato de archivo especificado.

Por ejemplo, los datos del archivo pueden ser en formato de archivo de texto, y tal vez no le interese representar estos datos en un objeto String.

Por este motivo la clase FileStream incluye métodos de lectura y escritura para leer y escribir datos en (y de) tipos de objetos que no sean ByteArray. Por ejemplo, el método readMultiByte() permite leer datos de un archivo y guardarlos en una cadena, como en el siguiente código:

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

El segundo parámetro del método readMultiByte() especifica el formato de texto que utiliza ActionScript para interpretar los datos ("iso-8859-1" en el ejemplo). Adobe AIR admite las codificaciones de juegos de caracteres comunes (consulte Juegos de caracteres admitidos ).

La clase FileStream incluye también el método readUTFBytes() , que lee datos del búfer de lectura y los pone en una cadena utilizando el juego de caracteres UTF-8. Dada la longitud variable de los caracteres del juego de caracteres UTF-8, no utilice readUTFBytes() en un método que responda al evento progress , puesto que los datos al final del búfer de lectura pueden representar un carácter incompleto. (Este es también el caso cuando se emplea el método readMultiByte() con codificación de caracteres de longitud variable). Por este motivo conviene leer la totalidad de los datos cuando el objeto FileStream distribuye el evento complete .

También hay métodos similares de escritura, writeMultiByte() y writeUTFBytes() , para trabajar con objetos String y archivos de texto.

Los métodos readUTF() y writeUTF() (no deben confundirse con readUTFBytes() y writeUTFBytes() ) también leen y escriben los datos de texto en un archivo, pero presuponen que los datos de texto vienen precedidos de datos que especifican la longitud de los datos de texto, lo cual no es común con los archivos de texto estándar.

Algunos archivos de texto en código UTF empiezan con un carácter "UTF-BOM" (marca de orden de bytes) que define la propiedad "endian" además del formato de codificación (como UTF-16 o UTF-32).

Para ver un ejemplo de lectura y escritura en un archivo de texto, consulte Ejemplo: Lectura de un archivo XML para ponerlo en un objeto XML .

readObject() y writeObject() son formas convenientes de guardar y recuperar datos para objetos ActionScript complejos. Los datos se codifican en AMF (formato de mensaje de acción). Adobe AIR, Flash Player, Flash Media Server y Flex Data Services incluyen APIs para trabajar con datos en este formato.

Existen algunos otros métodos de lectura y escritura (como readDouble() y writeDouble() ). Si se utiliza alguno de estos, asegúrese de que el formato del archivo se corresponda con los formatos de los datos definidos por estos métodos.

Los formatos de archivo son a menudo más complejos que formatos de texto sencillo. Por ejemplo, un archivo MP3 incluye datos comprimidos que solo pueden interpretarse con algoritmos de descompresión y descodificación que son exclusivos para archivos MP3. Los archivos MP3 pueden incluir también etiquetas ID3 que contienen información acerca del archivo en forma de metaetiquetas (como el título y el artista de una canción). Existen varias versiones del formato ID3, pero la más sencilla de ellas (ID3 versión 1) se trata en la sección Ejemplo: Lectura y escritura de datos con acceso directo .

Otros formatos de archivos (para imágenes, bases de datos, documentos de aplicaciones, etc.) tienen distintas estructuras; para trabajar con estos datos en ActionScript hay que entender cómo están estructurados los mismos.