FileStream 객체의
position
속성은 다음 읽기 또는 쓰기 메서드에서 데이터를 읽거나 쓰는 위치를 결정합니다.
읽기 또는 쓰기 작업 전에
position
속성을 파일의 유효한 위치로 설정합니다.
예를 들어 다음 코드에서는 문자열
"hello"
(UTF 인코딩)를 파일의 위치 8에 기록합니다.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 8;
myFileStream.writeUTFBytes("hello");
FileStream 객체를 처음으로 열 때
position
속성은 0으로 설정되어 있습니다.
읽기 작업 전에
position
의 값은 0 이상이고 파일의 바이트 수(파일의 기존 위치)보다 작아야 합니다.
position
속성 값은 다음과 같은 조건에 해당하는 경우에만 수정됩니다.
FileStream 객체의 읽기 또는 쓰기 메서드를 호출하면
position
속성이 읽거나 쓰는 바이트 수만큼 즉시 증가합니다. 사용하는 읽기 메서드에 따라
position
속성이 읽을 바이트 수만큼 또는 사용 가능한 바이트 수만큼 증가합니다. 이후에 읽기 또는 쓰기 메서드를 호출하면 읽기 또는 쓰기가 새 위치에서 시작됩니다.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
trace(myFileStream.position); // 4200
그러나 FileStream 객체를 추가 모드로 연 경우에는 예외적으로 쓰기 메서드를 호출한 후에도
position
속성이 변경되지 않습니다. 추가 모드에서는
position
속성의 값과 상관없이 데이터가 항상 파일의 끝에 기록됩니다.
파일을 비동기 작업용으로 연 경우에는 다음 코드 행이 실행될 때까지 쓰기 작업이 완료되지 않습니다. 그러나 여러 비동기 메서드를 차례대로 호출할 수 있으며, 런타임에서 이러한 메서드를 순서대로 실행합니다.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.WRITE);
myFileStream.writeUTFBytes("hello");
myFileStream.writeUTFBytes("world");
myFileStream.addEventListener(Event.CLOSE, closeHandler);
myFileStream.close();
trace("started.");
closeHandler(event:Event):void
{
trace("finished.");
}
이 코드의 trace 출력은 다음과 같습니다.
started.
finished.
읽기 또는 쓰기 메서드를 호출한 후 즉시 또는 언제든지
position
값을 지정
할 수 있으며
다음 읽기 또는 쓰기 작업은 해당 위치에서 시작됩니다. 예를 들어 다음 코드에서는
writeBytes()
작업을 호출하는 즉시
position
속성을 설정하며, 쓰기 작업이 완료된 후에도
position
은 해당 값(300)으로 설정되어 있습니다.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
myFileStream.position = 300;
trace(myFileStream.position); // 300