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.