我們在Flash中的IO範圍仍然有限;引用「Loader」或更具體的「根」(您仍然可以使用)的想法 - 這隻會假設您的二進制數據對象可以在頁級別加載SWF。你似乎更多地關注Flash解析字節數組的方式。
這是一個很長的話題,並且已經被過度討論了[在我看來],但是由於Flash使用AMF並從任何主機實例化海關對象,所以有一大組可用的Native AS 3.0(不支持AIR或需要Flex) - 可用於讀取,寫入和編碼二進制文件。
下面是一個例子類我寫的不是很久以前的JR開發誰需要的系列化如何在AS 3.0快速瞭解 - 我希望它能幫助:
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
});
}
}
}
好猜,我只是發現swf通常是ZLIB'ed。 我的需求是驗證swf的內容沒有被更改,並且必須從swf中進行檢查。但知道字節是壓縮的,我只需在創建引用之前解壓縮它們。 – ThomasWeiss
是的,似乎應該工作。如果您使用Flex進行編譯,我知道編譯器有壓縮選項(請參閱http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html)。我猜想,無論你用什麼方法編譯你的SWF文件,都會有類似的內容,對你來說可能是有用的 – user1103976