Форматы данных и выбор методов чтения и записи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, необходимо понимать, как они организованы. |
|