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
|
|