当打开具有读取功能的 FileStream 对象时(在该对象中,
            
             open()
            
            或
            
             openAsync()
            
            方法的
            
             fileMode
            
            参数设置为
            
             READ
            
            或
            
             UPDATE
            
            ),运行时将数据存储在内部缓冲区中。当您打开文件后,FileStream 对象立即开始将数据读取到缓冲区中(通过调用 FileStream 对象的
            
             open()
            
            或
            
             openAsync()
            
            方法)。
           
           
            对于打开执行同步操作的文件(使用
            
             open()
            
            方法),您始终可以设置
            
             position
            
            指针指向任何有效位置(在文件的范围内),并开始读取任何数量的数据(在文件的范围内),如以下代码中所示(假定该文件包含至少 100 个字节):
           
           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);   
           
            无论打开文件进行同步操作还是异步操作,读取方法始终从由
            
             bytesAvalable
            
            属性表示的“可用”字节读取。当以同步方式读取时,任何时间文件的所有字节都是可用的。当以异步方式读取时,在由
            
             progress
            
            事件指示的一系列异步缓冲区填充数据中,从
            
             position
            
            属性指定的位置开始的字节是可用的。
           
           
            对于打开进行
            
             同步
            
            操作的文件,
            
             bytesAvailable
            
            属性始终设置为表示从
            
             position
            
            属性到文件结尾的字节数(文件中所有字节始终是可以读取的)。
           
           
            对于打开进行
            
             异步
            
            操作的文件,您需要确保在调用读取方法之前读取缓冲区已包含了足够的数据。对于以异步方式打开的文件,随着读取操作的进行,文件中从读取操作开始时指定的
            
             position
            
            开始的数据将添加到缓冲区,每读取一个字节
            
             bytesAvailable
            
            属性增加一。
            
             bytesAvailable
            
            属性指示从
            
             position
            
            属性指定的位置的字节开始到缓冲区结尾的可用字节数。FileStream 对象定期发送一个
            
             progress
            
            事件。
           
           
            对于以异步方式打开的文件,随着数据在读取缓冲区中可用,FileStream 对象定期调度
            
             progress
            
            事件。例如,当数据读取到缓冲区时,以下代码将把该数据读取到 ByteArray 对象
            
             bytes
            
            中:
           
           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); 
} 
           
            对于以异步方式打开的文件,只能读取读取缓冲区中的数据。而且,当您读取数据后,它即从读取缓冲区中删除。对于读取操作,您需要确保在调用读取操作之前数据在读取缓冲区中存在。例如,以下代码读取文件中从位置 4000 开始的 8000 个字节:
           
           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 对象不会将数据读入读取缓冲区中。当写入操作完成后(写入缓冲区中所有数据都已写入文件),FileStream 对象启动一个新的读取缓冲区(假定关联的 FileStream 对象已打开并具有读取功能),并开始将从
            
             position
            
            属性指定的位置开始的数据读入读取缓冲区中。
            
             position
            
            属性可以是写入的最后一个字节的位置,也可以是其他位置(如果在写入操作后用户为
            
             position
            
            对象指定了其他值)。