Форматы данных и выбор методов чтения и записи

Adobe AIR 1.0 и более поздних версий

Каждый файл представляет собой набор байтов на диске. В ActionScript данные любого файла могут быть представлены в форме байтового массива (ByteArray). Например, ниже показано, как данные считываются из файла в объект ByteArray с названием 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); 
} 

Таким же образом данные записываются из объекта ByteArray с названием bytes в файл:

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

Однако далеко не всегда есть смысл хранить данные в объекте ByteArray. И далеко не всегда данные содержатся в файле указанного формата.

Например, данные в файле могут быть в текстовом формате, и тогда их можно представить в виде строки (объект String).

По этой причине класс FileStream содержит методы чтения и записи данных не только для объектов ByteArray. Например, метод readMultiByte() позволяет считывать данные из файла и сохранять их в виде строки, как показано ниже:

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

Второй параметр метода readMultiByte() задает формат, который в языке ActionScript используется для интерпретации данных (например, «iso-8859-1»). Adobe AIR поддерживает общепринятые кодировки наборов символов (см. « Поддерживаемые наборы символов »).

Класс FileStream также содержит метод readUTFBytes() , считывающий данные из буфера чтения в строку с помощью набора символов UTF-8. Так как символы в кодировке UTF-8 могут иметь разную длину, не используйте метод readUTFBytes() для реакции на событие progress , потому что данные в конце буфера чтения могут представлять неполный символ. (Это также относится к использованию метода readMultiByte() с кодировками символов различной длины.) По этой причине весь набор данных необходимо считать, когда объект FileStream отправляет событие complete .

Существуют и другие схожие методы записи: writeMultiByte() и writeUTFBytes() , — используемые при работе с объектами String и текстовыми файлами.

Методы readUTF() и writeUTF() (не путать с readUTFBytes() и writeUTFBytes() ) также используются для чтения и записи текстовых данных в файл, но в этом случае предполагается, что текстовым данным предшествуют данные, задающие длину этих текстовых данных — в стандартных текстовых файлах это встречается редко.

Некоторые текстовые файлы в кодировке UTF начинаются с символа «UTF-BOM» (отметка порядка байтов), определяющего порядок следования байтов и формат кодировки (UTF-16 или UTF-32).

Пример чтения и записи в текстовый файл приводится в разделе Пример: чтение XML-файла в XML-объект .

Методы readObject() и writeObject() подходят для хранения и извлечения данных из сложных объектов ActionScript. Данные кодируются в формат сообщений AMF (ActionScript Message Format). Для работы с данными в этом формате Adobe AIR, Flash Player, Flash Media Server и Flex Data Services включают в себя соответствующие API.

Существуют и другие методы чтения и записи (например, readDouble() и writeDouble() ). Тем не менее при их использовании проверяйте, чтобы формат файла совпадал с форматом определенных этими методами данных.

Форматы файлов бывают и более сложными, чем обычный текстовый. Например, в MP3-файле содержатся сжатые данные, которые могут интерпретироваться только алгоритмами развертывания и раскодирования MP3-файлов. MP3-файлы также могут содержать теги ID3 с метаданными об этом файле (например, название композиции и имя исполнителя). Существует множество версий формата ID3; самая простая из них (ID3 версии 1) рассматривается в разделе Пример: чтение и запись данных со случайным доступом .

Структура других файловых форматов (изображений, баз данных, документов приложений и т. д.) отличается, поэтому для того, чтобы работать с ними в ActionScript, необходимо понимать, как они организованы.