De eigenschap
position
van een FileStream-object bepaalt waar gegevens worden gelezen of geschreven bij de volgende lees- of schrijfmethode.
Voordat u een lees- of schrijfbewerking uitvoert, stelt u de eigenschap
position
in op een geldige positie in het bestand.
De volgende code schrijft bijvoorbeeld de tekenreeks
"hello"
(in UTF-codering) naar positie 8 in het bestand:
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");
Wanneer u een FileStream-object voor het eerst opent, is de eigenschap
position
ingesteld op 0.
Voordat een leesbewerking wordt uitgevoerd, moet de waarde van
position
minimaal 0 zijn en minder dan het aantal bytes in het bestand (de bestaande posities in het bestand).
De waarde van de eigenschap
position
wordt alleen gewijzigd onder de volgende omstandigheden:
-
wanneer u de eigenschap
position
expliciet instelt;
-
wanneer u een leesmethode oproept;
-
wanneer u een schrijfmethode oproept.
Wanneer u een lees- of schrijfmethode van een FileStream-object oproept, wordt de waarde van de eigenschap
position
onmiddellijk verhoogd met het aantal bytes dat u leest of schrijft. Afhankelijk van de leesmethode die u gebruikt, wordt de waarde van de eigenschap
position
verhoogd met het aantal bytes dat u opgeeft om te lezen, of met het beschikbare aantal bytes. Wanneer u vervolgens een lees- of schrijfmethode oproept, begint deze te lezen of te schrijven bij de nieuwe positie.
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
Hiervoor geldt echter een uitzondering: bij een FileStream die wordt geopend in de toevoegmodus (append), wordt de waarde van de eigenschap
position
niet gewijzigd na het oproepen van een schrijfmethode. (In de toevoegmodus worden gegevens altijd aan het einde van het bestand geschreven, onafhankelijk van de waarde van de eigenschap
position
.)
Bij een bestand dat is geopend voor asynchrone bewerkingen, wordt de schrijfbewerking pas voltooid wanneer de volgende regel code is uitgevoerd. U kunt echter meerdere asynchrone methoden na elkaar oproepen; de runtime voert ze dan in de juiste volgorde uit:
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.");
}
De trace-uitvoer voor de code in dit voorbeeld is:
started.
finished.
U
kunt
de waarde van
position
opgeven onmiddellijk nadat u een lees- of schrijfmethode hebt opgeroepen (of op een willekeurig ander moment); de volgende lees- of schrijfbewerking vindt plaats vanaf die positie. Bij de volgende code wordt de eigenschap
position
bijvoorbeeld ingesteld onmiddellijk na het oproepen van de bewerking
writeBytes()
;
position
wordt ingesteld op die waarde (300), zelfs nadat de schrijfbewerking is voltooid:
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