在从字符串解码后将字节数组读入对象时出现问题。

时间:2011-07-29 16:12:15

标签: actionscript-3 bytearray

我正在尝试使用Base64为as3序列化和反序列化字节数组到字符串。

这是我的代码

public function Serialize(vector:Vector.<Action>):String
    {
        var bytes:ByteArray = new ByteArray();
        var serialized:String = "";

        registerClassAlias("Action", Action);

        try { bytes.writeObject(vector); trace("Unserialized bytes:\n" + bytes + "\n"); }
        catch (e:Error) { trace("Writing object Failed!!\n" + e); }

        bytes.position = 0;
        bytes.compress();
        trace("Compressed bytes:\n" + bytes + "\n");

        return Base64.encode(bytes);
    }

public function Deserialize(serializedString:String):Vector.<Action>
    {
        var deserialized:ByteArray = new ByteArray();
        var deserializedObj:Object = new Object();
        var newVector:Vector.<Action> = new Vector.<Action>();

        try { deserialized = Base64.decode(serializedString); trace("Deserialized bytes:\n" + deserialized + "\n"); }
        catch (e:Error) { trace("Decoding Failed!!\n" + e); }

        deserialized.position = 0;
        deserialized.uncompress();
        trace("Uncompressed bytes:\n" + deserialized + "\n");

        try { deserializedObj = deserialized.readObject(); trace("Moving bytes into an object" + deserializedObj); }
        catch (e:Error) { trace("Reading Object Failed!!\n" + e); }

        for each(var a:Action in deserializedObj)
        {
            trace(a);
            newVector.push(a);
        }

        return newVector;
    }

我对此进行了测试,序列化工作正常,但

Reading Object Failed!!
ArgumentError: Error #1063: Argument count mismatch on System::Action(). Expected 2, got 0.

是我致电deserializedObj = deserialized.readObject();后得到的错误 如果我只是想把它放到一个对象中,我应该得到那个错误吗?我还没有尝试将它放入一个动作类对象中,但如果是,那么它所获得的动作就没有最初在里面的参数。

2 个答案:

答案 0 :(得分:2)

看起来Action有一个构造函数,它带有两个参数(没有默认值)。 readObject显然can't handle使用非默认构造函数构造对象。

更改Action以使其构造函数参数具有默认值,并查看是否有帮助。

答案 1 :(得分:0)

我从未见过那个错误系统:动作 我看到的唯一可能是问题。

尝试移动

deserialized.uncompress();

上面

deserialized.position = 0;