Asynkron programmering och händelser som genereras av ett FileStream-objekt som öppnas asynkront

Adobe AIR 1.0 och senare

När en fil öppnas asynkront (med metoden openAsync() ) läses och skrivs filer asynkront. Allt eftersom data läses till läsbufferten och utdata skrivs, kan annan ActionScript-kod köras.

Det innebär att du måste registrera händelser som genereras av FileStream-objektet som har öppnats asynkront.

Genom att registrera progress -händelsen kan du bli meddelad när nya data blir tillgängliga för läsning, som i koden nedan:

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

Du kan läsa alla data genom att registrera complete -händelsen, som i koden nedan:

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

På ungefär samma sätt som indata buffertlagras för att möjliggöra asynkron läsning, buffertlagras data som du skriver i en asynkron ström och de skrivs till filen asynkront. Allt eftersom data skrivs till en fil skickar FileStream-objektet regelbundet ett OutputProgressEvent -objekt. Ett OutputProgressEvent -objekt omfattar en bytesPending -egenskap som ställs in på antalet byte som finns kvar att skriva. Du kan registrera outputProgress -händelsen om du vill bli meddelad när bufferten verkligen skrivs till filen, kanske om du vill visa en förloppsdialogruta. I allmänhet behöver du emellertid inte göra detta. Du kan anropa metoden close() utan att behöva bekymra dig om byte som inte skrivs. FileStream-objektet fortsätter att skriva data och close -händelsen levereras efter att den sista byten har skrivits till filen och den underliggande filen stängs.