Die
position
-Eigenschaft eines FileStream-Objekts legt fest, wo Daten mit der nächsten read- oder write-Methode gelesen werden.
Setzen Sie vor einer Lese- oder Schreiboperation die Eigenschaft
position
auf eine beliebige, gültige Position in der Datei.
Der folgende Code beispielsweise schreibt an der Position 8 in der Datei den String
"hello"
(in UTF-Kodierung):
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 8;
myFileStream.writeUTFBytes("hello");
Wenn Sie ein FileStream-Objekt das erste Mal öffnen, wird die Eigenschaft
position
auf 0 gesetzt.
Vor einer read-Operation muss der Wert von
position
mindestens 0 sein und weniger als die Anzahl von Byte in der Datei (d. h. vorhandene Positionen in der Datei).
Der Wert der Eigenschaft
position
wird nur in den folgenden Situationen verändert:
-
Wenn Sie die Eigenschaft
position
ausdrücklich festlegen.
-
Wenn Sie eine read-Methode aufrufen.
-
Wenn Sie eine write-Methode aufrufen.
Wenn Sie eine read- oder write-Methode eines FileStream-Objekts aufrufen, wird die Eigenschaft
position
sofort um die Anzahl von Byte hochgezählt, die Sie lesen oder schreiben. Abhängig davon, welche read-Methode Sie verwenden, wird die Eigenschaft
position
entweder um die Anzahl von Byte hochgezählt, die Sie lesen oder schreiben, oder um die Anzahl verfügbarer Byte. Wenn Sie anschließend eine read- oder write-Methode aufrufen, wird ab der neuen Position gelesen oder geschrieben.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
trace(myFileStream.position); // 4200
Es gibt jedoch eine Ausnahme: bei einem im Ergänzungsmodus geöffneten FileStream-Objekt wird die Eigenschaft
position
nach einem Aufruf der write-Methode nicht geändert. (Im Ergänzungsmodus werden die Daten immer ans Dateiende angehängt, unabhängig vom Wert der
position
-Eigenschaft.)
Bei einer Datei, die für asynchrone Operationen geöffnet wurde, wird die write-Operation erst nach der Ausführung der nächsten Codezeile abgeschlossen. Sie können jedoch mehrere asynchrone Methoden nacheinander aufrufen und die Laufzeitumgebung wird sie in der angeführten Reihenfolge ausführen:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.WRITE);
myFileStream.writeUTFBytes("hello");
myFileStream.writeUTFBytes("world");
myFileStream.addEventListener(Event.CLOSE, closeHandler);
myFileStream.close();
trace("started.");
closeHandler(event:Event):void
{
trace("finished.");
}
Die Trace-Ausgabe für diesen Code ist folgendermaßen:
started.
finished.
Sie
können
den
position
-Wert unmittelbar nach dem Aufruf einer read- oder write-Methode angeben (oder zu einem beliebigen anderen Zeitpunkt) und die nächste read- oder write-Operation wird ab dieser Position ausgeführt. Beachten Sie beispielsweise, dass der folgende Code die
position
-Eigenschaft unmittelbar nach dem Aufruf einer
writeBytes()
-Operation gesetzt wird, und zwar auf den betreffenden Wert (
300
), sogar nachdem die write-Operation abgeschlossen ist:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
myFileStream.position = 300;
trace(myFileStream.position); // 300