Adobe Air (wiwobooks.com Release)
Weiterer Quelltext zur Verarbeitung des Inhalts
// (hier nicht gezeigt)
myFileStream.close();
}
catch(e:IOError) {
// Fehlerbehandlung
}
Listing 12.3 Beispiel: Lesen von Text aus einer Datei
12.4.3 Lese- und Schreiboperationen
Wenn Sie bereits mit serverseitigen Programmiersprachen gearbeitet haben, in denen Sie auf Dateien auf dem Server zugreifen, wird Ihnen der die Art und Weise bekannt vorkommen, wie in ActionScript bzw. AIR mit Zeigern und Dateiobjekten auf Dateien zugegriffen wird. Wenn Sie bisher überwiegend als Designer/-in oder als XHTML-, JavaScript- und CSS-Entwickler/-in tätig waren, mag das zugrunde liegende Konzept etwas gewöhnungsbedürftig erscheinen. Aber keine Sorge, es ist schlüssig und leicht zu verstehen! Stellen Sie sich eine mithilfe einer FileStream -Instanz geöffnete Datei einfach als einen Stapel von Zeichen vor (bzw. Bytes, wenn Sie sich auch andere Information als Text vorstellen wollen), den Sie mithilfe der FileStream -Instanzmethoden zum Lesen und Schreiben von Daten durchsuchen.
Dabei leitet sich die Länge des jeweils einzulesenden Datenpakets entweder vom Typ des Wertes ab (z. B. Byte oder Integer) oder wird als Parameter angegeben. So liest z. B. die Methode readUTF() abhängig vom konkreten UTF-8-Zeichen ein einzelnes oder auch zwei Bytes ein, readInt() hingegen vier, während writeObject() ein AMF-Objekt in den Datenstrom schreibt, dessen Länge in das serialisierte Objekt selbst eincodiert ist. Grundsätzlich lässt sich jede Datei in ActionScript als ByteArray ( readBytes() ) einlesen, also ein Feld von Bytes. Die anderen Lesemethoden dienen jedoch als bequeme Alternative, da sie das Lesen bestimmter Datentypen vereinfachen.
Position des Datenstroms (Eigenschaft position)
Die FileStream -Instanz verfügt über eine Eigenschaft position , die die aktuelle Position des Lese-/Schreibzeigers beinhaltet und die Stelle innerhalb der Datei meint, auf die die nächste Lese- oder Schreiboperation zugreift. Dabei steht der Wert 0 für den Beginn der Datei. Jede Lese- oder Schreiboperation rückt den Positionszeiger des FileStream -Objekts position um die Anzahl Bytes weiter, die gelesen bzw. geschrieben wurde. Wenn Sie beim Bild des Stapels bleiben wollen, entspricht das einer Markierung von weiteren Zeichen aus dem Stapel, die Sie »gesehen« haben.
Eine Ausnahme von dieser Regel stellt lediglich das Anhängen von Daten ( FileMode.APPEND ) dar – hier wird der Wert der Eigenschaft position nicht geändert, sondern die Daten stets an das Ende der Datei angehängt. Allerdings können Sie die Eigenschaft position auch selbst manipulieren und so den Zeiger willkürlich an eine beliebige Stelle innerhalb einer Datei setzen. Wenn Sie Information an einer Stelle aus einer Datei zu lesen bzw. in eine Datei zu schreiben versuchen, die jenseits der verfügbaren Daten liegt, führt dies zu einem Fehler EOFError .
Verfügbare Bytes (Eigenschaft bytesAvailable)
Die Eigenschaft bytesAvailable einer FileStream -Instanz gibt die Anzahl der zur Verfügung stehenden Bytes der Datei an. Wenn Sie nun annehmen, dass mit bytesAvailable die gesamte Länge der Datei gemeint ist, so haben Sie damit zum größten Teil recht. Je nachdem, ob Sie die FileStream -Instanz synchron oder asynchron geöffnet haben, ergeben sich substanzielle Unterschiede. Bei synchronem Laden wird z. B. die Datei zuerst komplett geladen; dem nächsten Befehl steht somit die gesamte Datei zur Verfügung und die Eigenschaft bytesAvailable steht in der Tat für die Gesamtzahl von Bytes in der Datei.
Während des Ladens von asynchron geöffneten FileStream -Objekten hingegen wird die Datei gewissermaßen »scheibchenweise« geladen und steht daher bereits teilweise zur Verfügung, bevor die Datei komplett geladen wurde. In diesem Fall steht die Eigenschaft bytesAvailable für die jeweils im Puffer zur Verfügung stehende Anzahl an Bytes.
12.4.4 Inhalt aus Datei auslesen
Zum Auslesen von Inhalt aus einer geöffneten Datei stellt die Klasse FileStream eine Reihe von Methoden zur Verfügung, die Sie in Tabelle 12.5 einsehen können. Da eine Datei in AIR hinter den Kulissen stets als ByteArray eingelesen wird, sind diese Methoden mit denen der ByteArray -Klasse selbst identisch (siehe Abschnitt 14.1.3).
Methode
readBoolean()
readByte()
readBytes(bytes:ByteArray, offset:uint, length:uint)
readDouble()
readFloat()
readInt()
readMultiByte(length:uint,
Weitere Kostenlose Bücher