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.