Programação assíncrona e eventos gerados por um objeto FileStream aberto assincronicamenteAdobe AIR 1.0 e posterior Quando um arquivo for aberto de modo assíncrono (usando o método openAsync()), os arquivos de leitura e gravação serão executados de modo assíncrono. À medida que os dados são lidos no buffer de leitura e os dados de saída começam a ser gravados, outro código ActionScript pode ser executado. Isso significa que é necessário se registrar para eventos gerados pelo objeto FileStream abertos de modo assíncrono. Registrando-se para o evento progress, você poderá ser notificado quando novos dados se tornarem disponíveis para leitura, como no seguinte código: var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function progressHandler(event:ProgressEvent):void
{
str += myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Você pode fazer a leitura de todos os dados se registrando para o evento complete, como no seguinte código: var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function completeHandler(event:Event):void
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Da mesma maneira que os dados de entrada são colocados em buffer para permitir a leitura assíncrona, os dados que você grava em um fluxo assíncrono são colocados em buffer e gravados no arquivo de forma assíncrona. À medida que os dados são gravados em um arquivo, o objeto FileStream despacha periodicamente o objeto OutputProgressEvent. O objeto OutputProgressEvent inclui a propriedade bytesPending definida pelo número de bytes restantes para gravação. Você pode registrar para que o evento outputProgress seja notificado, já que esse buffer é, na realidade, gravado no arquivo, talvez para exibir uma caixa de diálogo de progresso. No entanto, isso geralmente não é necessário. Especificamente, você pode chamar o método close() sem se importar com os bytes não gravados. O objeto FileStream continuará gravando dados e o evento close será entregue após o byte final ser gravado no arquivo e o arquivo subjacente ser fechado. |
|