我即将实施
public function writeExternal( output:IDataOutput ):void {...}
public function readExternal( input:IDataInput ):void {...}
使一组对象可序列化。
虽然我很确定,我已经正确实施了所有内容,readExternal(..)
在某一时刻抱怨数据太少而无法阅读:
RangeError: Error #2006: The supplied index is out of bounds.
at flash.filesystem::FileStream/readObject()
我想知道,如果我有像
这样的循环对象网络A = { left -> B, right -> B }
B = { father -> A }
我打电话
writeObject( a )
将Flex序列化孔对象网络和每个对象只有一个?
我这样做了:
[RemoteClass(alias="model.MyClass")]
implements IExternalizable
SharedObject的send()方法保证每次只发送一次对象。
其他信息:
请查看此related question。
答案 0 :(得分:0)
meta [RemoteClass]是一个指令,仅适用于Flex编译器识别为使用Flex框架的项目中使用的类。它基本上等同于调用registerClassAlias(MyClass, "model.MyClass");
由于多种原因扩展了这个主题的容量,我建议你改用registerClassAlias。
关于AMF内置编写器,行为如下:如果编写器接收到它需要立即写入的所有对象(如在树中,则为其提供根节点),然后它只会完全写入一次对象,下次出现对该对象的引用时,它将使用该引用。但是,如果你不断地提供它可能已被引用的对象(例如通过连续调用writeExternal),它会将每个对象视为新对象。至少在理论上,它也应该以另一种方式工作。也就是说,如果对象通过引用序列化,一旦它们反序列化,就应该使用引用。这将有助于查看更多代码,特别是writeExternal和readExternal的实现,以提供更好的答案。