FileStream 对象的 position 属性Adobe AIR 1.0 和更高版本 FileStream 对象的 position 属性确定下一个读取或写入方法读取或写入数据的位置。 执行读取或写入操作之前,请将 position 属性设置为文件中的任何有效位置。 例如,以下代码在文件的位置 8 处写入字符串 "hello"(采用 UTF 编码): 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 属性的值:
当您调用 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 不过,有一个例外:对于以 append 模式打开的 FileStream,调用写入方法后 position 属性不变。(在 append 模式中,数据始终写入文件的结尾,而与 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 值,下一个读取或写入操作将从该位置开始执行。例如,请注意以下代码在调用 writeBytes() 操作后立即设置 position 属性,即使写入操作完成后 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 |
|