Flash 中的 IO 范围仍然有限;对“加载器”的引用或更具体到“根”的概念(您仍然可以使用) - 这只是假设您的二进制数据对象可以在页面级别访问 SWF。您似乎正在寻找更多关于 Flash 如何解析字节数组的 1-2。
这是一个很长的话题,[在我看来]已经被过度讨论了,但是由于 Flash 使用 AMF 并从任何主机实例化自定义对象,因此有大量可用的类是 Native AS 3.0(不需要 AIR 或 Flex) - 可用于读取、写入和编码二进制文件。
下面是我不久前为需要快速了解序列化在 AS 3.0 中的工作原理的 Jr 开发人员编写的示例类 - 我希望它有所帮助:
package {
import flash.display.*;
import flash.net.*;
import flash.events.*;
import flash.utils.*;
public class loadAndRead extends EventDispatcher {
private var ldr:Loader;
private var urq:URLRequest;
private var iba:ByteArray;
private var swf:String;
private var obj:*;
function loadAndRead() {
ldr = new Loader();
urq = new URLRequest(swf = 'anyswfanywhere.swf');
}
public function rd(d:*):void {
obj = d;
iba = obj['BTS'] as ByteArray() || ByteArray(obj['BTS']);
iba.uncompress()
iba.deflate();
iba.readUTFBytes();
iba.position = 0;
iba.uncompress();
iba.position = 0;
for each (var n:* in i.readObject())
{
if(n){trace(i.readObject()['n']+": "+n)
}
}
}
private function getSWF():void {
ldr.load(urq);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, ogs);
}
private function ogs(w:Event):void {
rd({L: ldr.contentLoaderInfo.bytes.length,
A: ldr.contentLoaderInfo.bytes.bytesAvailable,
T: ldr.contentLoaderInfo.contentType,
U: ldr.contentLoaderInfo.loaderURL,
BA: ldr.contentLoaderInfo.bytes.readUTF(),
BTS: ldr.contentLoaderInfo.bytes
});
}
}
}