Die position-Eigenschaft eines FileStream-ObjektsAdobe AIR 1.0 und höher 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 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
|
|