Jede Datei stellt eine Menge an Byte auf einem Speichermedium dar. In ActionScript können die Daten aus einer Datei immer als ein Byte-Array dargestellt werden. Der folgende Code etwa liest die Daten aus einer Datei in ein ByteArray-Objekt mit dem Namen
bytes
ein:
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);
}
Entsprechend schreibt der folgende Code Daten aus einem Byte-Array mit dem Namen
bytes
in eine Datei:
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);
Oft sollen jedoch die Daten gar nicht in einem ActionScript-ByteArray-Objekt gespeichert werden. Und häufig liegt die Datendatei in einem festgelegten Dateiformat vor.
Es könnte beispielsweise vorkommen, dass die Daten in der Datei in einem Textdateiformat vorliegen und Sie die Daten in einem String-Objekt darstellen wollen.
Aus diesem Grund besitzt die FileStream-Klasse read- und write-Methoden für das Lesen von Daten aus anderen Datentypen sowie für das Schreiben in andere Datentypen als in ByteArray-Objekte. Die Methode
readMultiByte()
beispielsweise ermöglicht das Lesen von Daten aus einer Datei und Speichern in einem String. Hier ein Codebeispiel:
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");
}
Der zweite Parameter der
readMultiByte()
-Methode gibt den Zeichensatz an (im Beispiel „iso-8859-1“), in dem ActionScript die Daten interpretieren soll. Adobe AIR unterstützt gängige Zeichensatzkodierungen (siehe
Unterstützte Zeichensätze
).
Die FileStream-Klasse besitzt auch die Methode
readUTFBytes()
, die unter Verwendung des UTF-8-Zeichensatzes Daten aus dem Lesepuffer in einen String liest. Zeichen im UTF-8-Zeichensatz haben unterschiedliche binäre Länge. Sie sollten also
readUTFBytes()
nicht in einer Methode verwenden, die auf das
progress
-Ereignis reagiert, da die Daten am Ende des Lesepuffers ein unvollständiges Zeichen repräsentierten könnten. (Dies trifft auch zu, wenn die Methode
readMultiByte()
mit einer anderen Kodierungsform variabler Länge verwendet wird.) Aus diesem Grund sollten Sie die gesamte Datenmenge lesen, wenn das FileStream-Objekt das
complete
-Ereignis auslöst.
Es gibt auch ähnliche write-Methoden für die Arbeit mit String-Objekten und Textdateien,
writeMultiByte()
und
writeUTFBytes()
.
Die Methoden
readUTF()
und
writeUTF()
(nicht zu verwechseln mit
readUTFBytes()
und
writeUTFBytes()
) lesen und schreiben ebenfalls Textdaten aus und in eine Datei, setzen aber voraus, dass den Textdaten Daten vorangestellt sind, die die Länge der Textdaten angeben, was in Standardtextdateien nicht unbedingt üblich ist.
Einige UTF-kodierte Textdateien beginnen mit einem „UTF-BOM“ (Byte Order Mark), einer Marke für die Bytereihenfolge, welche sowohl das Kodierungsschema (Little oder Big Endian, LE oder BE) als auch die Kodierungsform (z. B. UTF-16 oder UTF-32) definiert.
Ein Beispiel für das Lesen aus einer und Schreiben in eine Textdatei finden Sie unter
Beispiel: Einlesen einer XML-Datei in ein XML-Objekt
.
Das
readObject()
und das
writeObject()
sind praktische Möglichkeiten, um Daten für komplexe ActionScript-Objekte zu speichern und abzurufen. Die Daten werden im AMF (ActionScript Message Format) kodiert. Adobe AIR, Flash Player, Flash Media Server und Flex Data Services enthalten APIs für die Arbeit mit Daten in diesem Format.
Es gibt noch einige weitere read- und write-Methoden (etwa
readDouble()
und
writeDouble()
). Wenn Sie diese Methoden jedoch verwenden, sollten Sie sicherstellen, dass das Dateiformat dem von diesen Methoden definierten Format entspricht.
Dateiformate sind häufig komplexer als einfache Textformate. Eine MP3-Datei beispielsweise umfasst komprimierte Daten, die nur mit für MP3-Dateien spezifischen Dekomprimierungs- und Dekodierungsalgorithmen interpretiert werden können. MP3-Dateien können auch ID3-Tags mit Metatag-Informationen über die Datei enthalten (z. B. Titel und Interpret eines Musikstückes). Es gibt mehrere Versionen des ID3-Formats, von denen die einfachste (ID3 Version 1) im Abschnitt
Beispiel: Lesen aus und Schreiben in zufällige Stellen einer Datei
erläutert wird.
Andere Dateiformate (für Bilder, Datenbanken, Anwendungsdokumente usw.) haben wiederum andere Strukturen und wenn Sie in ActionScript mit ihren Daten arbeiten wollen, müssen Sie die Struktur dieser Daten verstehen.