Właściwość position obiektu FileStream

Adobe AIR 1.0 i starsze wersje

Właściwość position obiektu FileStream określa, czy dane są odczytywane lub zapisywane przez następną metodę odczytu lub zapisu.

Przed wykonaniem operacji odczytu lub zapisu należy ustawić właściwość position na poprawną pozycję w pliku.

Przykład: poniższy kod zapisuje ciąg znaków "hello" (kodowanie UTF) w pozycji 8 w pliku:

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

Przy pierwszym otwarciu obiektu FileStream dla właściwości position ustawiona zostaje wartość 0.

Przed operacją odczytu wartość position musi wynosić co najmniej 0 i musi być mniejsza niż liczba bajtów w pliku (bajty są istniejącymi pozycjami w pliku).

Wartość właściwości position jest modyfikowana w następujących warunkach:

  • Po jawnym ustawieniu właściwości position .

  • Po wywołaniu metody read.

  • Po wywołaniu metody write.

Po wywołaniu metody read lub write obiektu FileStream właściwość position jest natychmiast zwiększana o liczbę bajtów odczytywanych lub zapisywanych. W zależności od tego, która metoda read jest używana, właściwość position jest zwiększana o liczbę bajtów określonych do odczytu lub o liczbę bajtów dostępnych. Jeśli następie zostanie wywołana metoda read lub write, metoda wykona operację odczytu lub zapisu począwszy od nowej pozycji.

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          

Istnieje jednak jeden wyjątek: w przypadku obiektu FileStream otwartego w trybie append właściwość position nie jest zmieniana po wywołaniu metody write. (W trybie append dane są zawsze zapisywane na końcu pliku niezależnie od wartości właściwości position ).

W przypadku pliku otwartego dla operacji asynchronicznych operacja write nie kończy działania przed wykonaniem kolejnego wiersza kodu. Jednak możliwe jest wywołanie kolejno wielu metod asynchronicznych, a wówczas środowisko wykonawcze wykonuje je w określonej kolejności:

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

Wynik (trace (output)) dla tego kodu jest następujący:

started. 
finished.

Możliwe jest określenie wartości position bezpośrednio po wywołaniu metody read lub call (lub w dowolnym czasie), a wówczas następna operacja odczytu lub zapisu odbywa się od tej pozycji. Przykład: poniższy kod ustawia właściwość position po wywołaniu operacji writeBytes() , a dla parametru position ustawiana jest ta wartość (300) nawet po zakończeniu operacji write:

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