FileStream nesnesinin okuma arabelleği ve bytesAvailable özelliği

Adobe AIR 1.0 ve üstü

Okuma özelliklerine sahip bir FileStream nesnesi (open() veya openAsync() yönteminin fileMode parametresinin READ veya UPDATE olarak ayarlı olduğu) açıldığında çalışma zamanı, verileri dahili bir arabellekte saklar. FileStream nesnesi, siz dosyayı açar açmaz (FileStream nesnesinin open() veya openAsync() yöntemini çağırarak) verileri arabelleğe okumaya başlar.

Aşağıdaki kodda gösterildiği gibi (dosyanın en az 100 bayttan oluştuğunu varsayar), senkronize işlemler için açılan bir dosyada (open() yöntemi kullanılarak), position işaretçisini herhangi bir geçerli konuma ayarlayabilirsiniz (dosyanın sınırları içinde) ve herhangi bir miktardaki veriyi okumaya başlayabilirsiniz (dosyanın sınırları içinde):

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); 
var myFileStream:FileStream = new FileStream(); 
myFileStream.open(myFile, FileMode.READ); 
myFileStream.position = 10; 
myFileStream.readBytes(myByteArray, 0, 20); 
myFileStream.position = 89; 
myFileStream.readBytes(myByteArray, 0, 10);   

Read yöntemleri, bir dosyanın senkronize veya senkronize olmayan işlemler için açıldığına bakılmaksızın, okuma işlemini her zaman bytesAvalable özelliği tarafından temsil edilen "kullanılabilir" baytlardan gerçekleştirir. Senkronize olarak okurken, dosyadaki tüm baytlar her zaman kullanılabilirdir. Senkronize olmayan bir şekilde okuma yaparken, progress olayları tarafından bildirilen senkronize olmayan arabellek dolumları dizisinde, baytlar, position özelliği tarafından belirtilen konumdan başlayarak kullanılabilir olur.

Senkronize işlemler için açılan dosyalarda, bytesAvailable özelliği her zaman position özelliğinden dosyanın sonuna kadar olan bayt sayısını temsil edecek şekilde ayarlıdır. (Dosyadaki tüm baytlar her zaman okunabilir.)

Senkronize olmayan işlemler için açılan dosyalarda, okuma arabelleğinin bir read yöntemini çağırmadan önce yeterli veri tüketmiş olduğundan emin olmanız gerekir. Senkronize olmayan bir şekilde açılmış bir dosyada, okuma işlemi ilerledikçe, dosyadaki veriler okuma işlemi başlatıldığında belirtilen position öğesinden başlayarak arabelleğe eklenir ve okunan her baytla bytesAvailable özelliği artar. bytesAvailable özelliği, position özelliği tarafından belirtilen konumdaki baytla başlayarak arabelleğin sonuna kadar kullanılabilir olan baytların sayısını gösterir. FileStream nesnesi düzenli aralıklarla bir progress olayı gönderir.

Senkronize olmayan bir şekilde açılan dosyada, veriler okuma arabelleğinde kullanılabilir oldukça, FileStream nesnesi düzenli aralıklarla progress olayını gönderir. Örneğin aşağıdaki kod, arabelleğe okundukça verileri bytes adlı bir ByteArray nesnesine okur:

var bytes:ByteArray = new ByteArray(); 
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); 
 
function progressHandler(event:ProgressEvent):void  
{ 
    myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable); 
} 

Senkronize olmayan bir şekilde açılan dosyada, yalnızca okuma arabelleğindeki veriler okunabilir. Ayrıca siz verileri okudukça, veriler okuma arabelleğinden kaldırılır. Okuma işlemleri için, okuma işlemini çağırmadan önce verilerin okuma arabelleğinde bulunduğundan emin olmanız gerekir. Örneğin aşağıdaki kod, dosyada konum 4000'den başlayarak 8000 bayt veri okur:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); 
var myFileStream:FileStream = new FileStream(); 
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
myFileStream.addEventListener(Event.COMPLETE, completed); 
myFileStream.openAsync(myFile, FileMode.READ); 
myFileStream.position = 4000; 
 
var str:String = ""; 
 
function progressHandler(event:Event):void  
{ 
    if (myFileStream.bytesAvailable > 8000 ) 
    { 
        str += myFileStream.readMultiByte(8000, "iso-8859-1"); 
    } 
} 

FileStream nesnesi bir yazma işlemi boyunca verileri okuma arabelleğine okumaz. Bir yazma işlemi tamamlandığında (yazma arabelleğindeki tüm veriler dosyaya yazılır), FileStream nesnesi yeni bir okuma arabelleğine başlar (ilişkilendirilen FileStream nesnesinin okuma özellikleriyle açıldığı varsayılarak) ve position özelliği tarafından belirtilen konumdan başlayarak okuma arabelleğine veri okumaya başlar. position özelliği yazılan son baytın konumu veya kullanıcı yazma işleminden sonra position nesnesi için farklı bir değer belirtirse farklı bir konum olabilir.