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
이벤트가 전달됩니다.