De eigenschap position van een FileStream-object

Adobe AIR 1.0 of hoger

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