此动作脚本是否正确

时间:2011-07-12 17:29:17

标签: flash actionscript-3

我有像这样的反编译闪存的动作脚本

    public function getResourceAsByteArray(resID:int):flash.utils.ByteArray
    {
        var tempByteArray:*=null;
        var fName:*=this.clazzName;
        var resDataDup:*=new clazzByteArray() as flash.utils.ByteArray;
        var resPos:*=this.post;
        var resLength:*=1024;
        var resultByteArray:*=new flash.utils.ByteArray();
        resDataDup.position = resPos;
        resDataDup.readBytes(resultByteArray, 0, resLength);
        return resultByteArray;
    }

    public class clazzByteArray extends mx.core.ByteArrayAsset
    {
        public function clazzByteArray()
        {
            super();
            return;
        }
    }

我不是动作脚本程序员,但我尝试理解这个功能。 resDataDup是来自扩展ByteArray的类的本地对象,我认为使用此初始化方式resDataDup将始终为空,因此下一个readBytes调用始终会失败。它有可能以其他方式运作吗? (有些人可以在调用readBytes之前将数据放到resDataDup),或者反编译器没有正确生成它。

2 个答案:

答案 0 :(得分:4)

你是完全正确的。此代码无效。我怀疑你的反编译器没有告诉你的是ByteArrayAssets主要用于Flex中的embedded assets。这意味着clazzByteArray实际上引用了一些曾经嵌入的 thing 。但是,这在这里没有用。

答案 1 :(得分:1)

反编译器错了。正如@cwallenpoole所说,ByteArray很可能是嵌入mxmlc(Flex SDK编译器)的资产,而不是使用不同机制的Flash IDE。

但是有一些反编译器可以处理Flex项目,例如Sothink Decompiler。如果您已经在使用它,如果您告诉它将SWF反编译为Flex项目而不是.fla,那么您可能会有更多的运气。