Propiedad "position" de un objeto FileStream

Adobe AIR 1.0 y posterior

La propiedad position de un objeto FileStream determina dónde se leerán o escribirán los datos en el siguiente método de lectura o escritura.

Antes de una operación de lectura o escritura, configure la propiedad position con cualquier posición válida del archivo.

En el ejemplo siguiente, el código escribe la cadena "hello" (con código UTF) en la posición 8 del archivo:

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");  

Cuando recién se abre un objeto FileStream, la propiedad position es 0.

Antes de una operación de lectura, el valor de position debe ser 0 como mínimo y menos que la cantidad de bytes del archivo (que son las posiciones existentes en el archivo).

El valor de la propiedad position solo se modifica en las siguientes situaciones:

  • cuando se configura explícitamente la propiedad position ;

  • cuando se llama a un método de lectura;

  • cuando se llama a un método de escritura.

Cuando se llama a un método de lectura o escritura de un objeto FileStream, la propiedad position se incrementa inmediatamente en la cantidad de bytes que se leen o escriben. Dependiendo del método de lectura que se utilice, la propiedad position se incrementa en la cantidad de bytes que se especifican para leer o en la cantidad de bytes que hay disponibles. Posteriormente, al llamar a un método de lectura o escritura se leerá o escribirá empezando en la nueva posición.

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          

Hay una excepción a ello: si el FileStream se abrió en modo de anexado, la propiedad position no se modifica tras llamar a un método de escritura. (En el modo de anexado, los datos siempre se escriben al final del archivo, independientemente del valor de la propiedad position ).

Si es un archivo que se abrió para realizar operaciones asíncronas, la operación de escritura no se finaliza antes de ejecutarse la siguiente línea del código. Sin embargo, se puede llamar a varios métodos asíncronos de forma secuencial y la rutina los ejecuta en la secuencia prevista:

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."); 
}

La salida de la sentencia trace para este código es:

started. 
finished.

Sí se puede especificar el valor de position inmediatamente después de llamar a un método de lectura o escritura (o en cualquier momento); la siguiente operación de lectura o escritura se llevará a cabo empezando en esa posición. Por ejemplo, observe que el siguiente código define la propiedad position inmediatamente después de llamar a la operación writeBytes() , y position se define en ese valor (300) incluso después de haberse concluido la operación de escritura:

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