Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 克隆扩展字节数组时遇到问题_Apache Flex_Flash_Actionscript 3 - Fatal编程技术网

Apache flex 克隆扩展字节数组时遇到问题

Apache flex 克隆扩展字节数组时遇到问题,apache-flex,flash,actionscript-3,Apache Flex,Flash,Actionscript 3,我扩展了ByteArray类,如下所示: [RemoteClass(alias="MyByteArray")] public class MyByteArray extends ByteArray {} 并使用ByteArray#readObject()/writeObject()克隆了该类的一个实例。但是,由于某些原因,克隆的对象是ByteArray而不是MyByteArray的实例。以下示例对此进行了说明: registerClassAlias("MyByteArray", MyByteA

我扩展了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的实例吗


非常感谢

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

ByteArray可能作为对象序列化的特例处理,因此我怀疑您是否能够绕过它


试图对ByteArray进行子类化对我来说就像是一种代码味道。我会考虑使用封装而不是继承来解决您的问题。

不,tmp需要是ByteArray类型。这是在AS3中克隆对象的典型方式,也是作为ObjectUtil.copy()实现的。类型转换没有帮助,因为tmp.writeObject()不保存MyByteArray的任何字段(在这个最小的示例中,MyByteArray没有字段,但在我的应用程序中有)。奇怪的是,如果MyByteArray没有扩展ByteArray,那么一切都正常,即克隆后b2是MyByteArray类型。感谢您的输入。我故意使用继承而不是封装,因为我试图欺骗Flash Player一点。。。我试图将MyByteArray而不是ByteArray作为参数传递给FileReference#save(),希望能够将数据“流”到本地文件,而不是一次写入整个文件(MyByteArray将实时生成数据)。我已经在这里描述了这个问题:尝试在对象上实现IDataInput。如果做不到这一点,我所知道的唯一解决方案是纯AIR(FileStream),在阅读了它之后,看起来您需要将内容流式传输到ByteArray(实现IDataOutput)中,然后保存该ByteArray实例。重新加载时,您可以从中读取(它还实现了IDataInput)。我的内容大于可用内存,因此我无法通过teArray将整个内容流式传输到内存中。我需要将它直接(或分块)流式传输到一个文件中,就像在FileStream类中一样(仅限AIR)。然而,在我看来,这在Flash 10中是不可能的。。。