无法克隆扩展的ByteArray

时间:2009-05-17 18:30:11

标签: flex flash actionscript-3

我已经扩展了ByteArray类,如下所示:

[RemoteClass(alias="MyByteArray")]
public class MyByteArray extends ByteArray {}

使用ByteArray #readObject()/ writeObject()克隆此类的实例。但是,由于某种原因,克隆对象是ByteArray的实例而不是MyByteArray。以下示例说明了这一点:

registerClassAlias("MyByteArray", MyByteArray);
var b1:MyByteArray = new MyByteArray();
var tmp:ByteArray = new ByteArray();
tmp.writeObject(b1);           
tmp.position = 0;
var b2:* = tmp.readObject();
trace( b2 is MyByteArray ); // prints false
trace( b2 is ByteArray ); // prints true

此外,当我在MyByteArray类中添加一些自定义字段时,它们不会与writeObject()一起保存,也不会克隆...

有人可以解释为什么克隆对象不是MyByteArray的实例吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为这是因为tmp是ByteArray类型,而不是MyByteArray类型。如果你创建类型为MyByteArray的tmp,它应该返回一个相同类型的对象,我认为使用writeObject?或者您可能需要对其进行类型转换。

答案 1 :(得分:0)

ByteArray很可能作为对象序列化的特例处理,所以我怀疑你会解决它。

尝试子类ByteArray听起来像是一个代码味道给我。我会考虑使用封装而不是继承来解决您的问题。