Asynkron programmering och händelser som genereras av ett FileStream-objekt som öppnas asynkrontAdobe 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. |
|