我正在尝试使用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();
后得到的错误
如果我只是想把它放到一个对象中,我应该得到那个错误吗?我还没有尝试将它放入一个动作类对象中,但如果是,那么它所获得的动作就没有最初在里面的参数。
答案 0 :(得分:2)
看起来Action
有一个构造函数,它带有两个参数(没有默认值)。 readObject
显然can't handle使用非默认构造函数构造对象。
更改Action
以使其构造函数参数具有默认值,并查看是否有帮助。
答案 1 :(得分:0)
我从未见过那个错误系统:动作 我看到的唯一可能是问题。
尝试移动
deserialized.uncompress();
上面
deserialized.position = 0;