Свойство position объекта FileStream

Adobe AIR 1.0 и более поздних версий

Свойство position объекта FileStream определяет, откуда считываются и куда записываются данные при вызове следующего метода чтения или записи.

Перед операцией чтения или записи свойство 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 изменяется только при следующих условиях:

  • если свойство 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."); 
}

Вот как выглядит пошаговое выполнение этого кода:

started. 
finished.

Значение свойства position может быть задано сразу после вызова метода чтения или записи (или в любое время), и тогда следующая операция чтения или записи начнется из этого положения. Например, обратите внимание, что в приведенном ниже коде свойство position задается сразу после вызова операции writeBytes() , а значение свойства 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