비동기적으로 연 FileStream 객체가 생성하는 이벤트 및 비동기 프로그래밍Adobe AIR 1.0 이상 openAsync() 메서드를 사용하여 파일을 비동기적으로 여는 경우 파일 읽기 및 쓰기가 비동기적으로 수행됩니다. 데이터를 읽기 버퍼로 읽어 오고 출력 데이터가 기록되면 다른 ActionScript 코드를 실행할 수 있습니다. 따라서 비동기적으로 연 FileStream 객체가 생성한 이벤트를 등록해야 합니다. 다음 코드에서처럼 progress 이벤트를 등록하면 새 데이터를 읽을 수 있게 될 때 알림을 받을 수 있습니다. 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"); } 다음 코드에서처럼 complete 이벤트를 등록하여 전체 데이터를 읽을 수 있습니다. 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"); } 비동기적으로 읽을 수 있도록 입력 데이터가 버퍼링되는 것과 마찬가지로 비동기 스트림에 쓰는 데이터는 버퍼링되어 파일에 비동기적으로 기록됩니다. 데이터가 파일에 기록되면 FileStream 객체는 OutputProgressEvent 객체를 정기적으로 전달합니다. OutputProgressEvent 객체에는 쓸 나머지 바이트 수로 설정되는 bytesPending 속성이 포함되어 있습니다. outputProgress 이벤트를 등록하면 버퍼가 실제로 파일에 기록될 때 알림을 받을 수 있으며 대개 진행률 대화 상자를 표시할 수 있습니다. 그러나 일반적으로 이렇게 할 필요는 없습니다. 특히 기록되지 않는 바이트에 대해 걱정할 필요 없이 close() 메서드를 호출할 수 있습니다. FileStream 객체는 데이터 쓰기를 계속하며 최종 바이트가 파일에 기록되고 기본 파일이 닫힌 후에 close 이벤트가 전달됩니다. |
|