Каждый файл представляет собой набор байтов на диске. В 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, необходимо понимать, как они организованы.