Formatos de dados e seleção de métodos de leitura e gravação para uso

Adobe AIR 1.0 e posterior

Todo arquivo é um conjunto de bytes em um disco. No ActionScript, os dados de um arquivo sempre podem ser representados como ByteArray. Por exemplo, o código a seguir faz a leitura de dados de um arquivo em um objeto ByteArray chamado 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 forma semelhante, o código seguinte grava dados de um ByteArray chamado bytes em um arquivo:

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

No entanto, normalmente você não quer armazenar dados em um objeto ByteArray do ActionScript. E, geralmente, o arquivo de dados está em um formato de arquivo especificado.

Por exemplo, os dados no arquivo podem estar em um formato de arquivo de texto e talvez você deseje representar esses dados em um objeto String.

Por esse motivo, a classe FileStream inclui métodos de leitura e gravação para leitura e gravação de dados em outros tipos diferentes dos objetos ByteArray e a partir deles. Por exemplo, o método readMultiByte() permite fazer a leitura de dados de um arquivo e armazená-los em uma sequência, como no código a seguir:

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

O segundo parâmetro do método readMultiByte() especifica o formato de texto que o ActionScript usa para interpretar os dados ("iso-8859-1" no exemplo). O Adobe AIR permite o uso de codificações comuns de conjuntos de caracteres (consulte Conjuntos de caracteres permitidos ).

A classe FileStream também inclui o método readUTFBytes() , que faz leitura de dados do buffer de leitura em uma sequência, usando o conjunto de caracteres UTF-8. Como os caracteres no conjunto de caracteres UTF-8 são de tamanho variável, não use readUTFBytes() em um método que responde ao evento progress , já que os dados no final do buffer de leitura podem representar um caractere incompleto. (Isso também é verdadeiro ao usar o método readMultiByte() com uma codificação de caractere de tamanho variável). Por esse motivo, leia o conjunto de dados inteiro quando o objeto FileStream despachar o evento complete .

Também há métodos de gravação semelhantes, writeMultiByte() e writeUTFBytes() , para trabalhar com objetos String e arquivos de texto.

Os métodos readUTF() e writeUTF() (não confundir com readUTFBytes() e writeUTFBytes() ) também fazem leitura e gravação de dados de texto em um arquivo, mas eles supõem que os dados de texto são precedidos por dados que especificam o tamanho dos dados de texto, o que não é prática comum em arquivos de texto padrão.

Alguns arquivos de texto de codificação UTF começam com um caractere "UTF-BOM" (marca de ordem de bytes) que define que a terminação, bem como o formato de codificação (como UTF-16 ou UTF-32).

Para obter um exemplo de leitura e gravação de um arquivo de texto, consulte Exemplo: Leitura de arquivo XML em um objeto XML .

readObject() e writeObject() são formas convenientes de armazenar e recuperar dados de objetos ActionScript complexos. Os dados são codificados em AMF (ActionScript Message Format). O Adobe AIR, o Flash Player, o Flash Media Server e o Flex Data Services incluem APIs para trabalhar co dados neste formato.

Há mais alguns métodos de leitura e gravação (como readDouble() e writeDouble() ). No entanto, se você usá-los, certifique-se de que o formato de arquivo corresponde ao formato dos dados definidos por esses métodos.

Os formatos de arquivos são normalmente mais complexos do que os formatos de texto simples. Por exemplo, o arquivo MP3 inclui dados compactados que só podem ser interpretados com a descompactação e os algoritmos de decodificação específicos para arquivos MP3. Arquivos MP3 também podem incluir marcas ID3 que contêm informações de metatag sobre o arquivo (como o título e o artista de uma canção). Há várias versões do formato ID3, mas a mais simples (ID3 versão 1) é discutida na seção Exemplo: Leitura e gravação de dados com acesso aleatório .

Outros formatos de arquivo (de imagens, bancos de dados, documentos de aplicativos etc.) têm estruturas diferentes e, para trabalhar com os respectivos dados no ActionScript, você deve saber como os dados são estruturados.