A propriedade
position
do objeto FileStream determina quando os dados são lidos ou gravados no próximo método de leitura ou gravação.
Antes de uma operação de leitura ou gravação, defina a propriedade
position
como qualquer posição válida no arquivo.
Por exemplo, o código a seguir grava a sequência
"hello"
(na codificação UTF) na posição 8 do arquivo:
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");
Quando você abre pela primeira vez o objeto FileStream, a propriedade
position
é definida como 0.
Antes de uma operação de leitura, o valor de
position
deve ser no mínimo 0 e inferior ao número de bytes no arquivo (que são posições existentes no arquivo).
O valor da propriedade
position
é modificado apenas nas seguintes condições:
-
Quando você define explicitamente a propriedade
position
.
-
Quando você chama o método de leitura.
-
Quando você chama o método de gravação.
Quando você chama um método de leitura ou gravação do objeto FileStream, a propriedade
position
é imediatamente incrementada pelo número de bytes que você lê ou grava. Dependendo do método de leitura usado, a propriedade
position
também é incrementada pelo número de bytes especificado para leitura ou pelo número de bytes disponível. Quando você chama o método de leitura ou gravação subsequentemente, ele faz a leitura ou gravação iniciando na nova posição.
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
Há, porém, uma exceção: em um FileStream aberto no modo append, a propriedade
position
não é alterada após uma chamada de um método de gravação. (No modo append, os dados são sempre gravados no final do arquivo, independentemente do valor da propriedade
position
.)
Em um arquivo aberto para operações assíncronas, a operação de gravação não é concluída antes de a próxima linha de código ser executada. No entanto, você pode chamar vários métodos assíncronos sequencialmente e o tempo de execução os executa em ordem:
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.");
}
A saída trace desse código é a seguinte:
started.
finished.
Você
pode
especificar o valor
position
logo após chamar um método de leitura ou gravação (ou a qualquer momento) e a próxima operação de leitura ou gravação ocorrerá no início dessa posição. Por exemplo, observe que o código a seguir define a propriedade
position
logo após uma chamada para a operação
writeBytes()
e a
position
é definida como esse valor (300) mesmo após a operação de gravação ser concluída:
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