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