Apache flex Flex:RemoteObject+;可外推的?

Apache flex Flex:RemoteObject+;可外推的?,apache-flex,amf,iexternalizable,Apache Flex,Amf,Iexternalizable,我一直在修补IExternalizable,但我注意到了一些意想不到的行为。我有一门课: public function readExternal(input:IDataInput):void { input.readObject(); input.readObject(); input.readObject(); } public function writeExternal(output:IDataOutput):void { output.writeObj

我一直在修补
IExternalizable
,但我注意到了一些意想不到的行为。我有一门课:

public function readExternal(input:IDataInput):void {
    input.readObject();
    input.readObject();
    input.readObject();
}

public function writeExternal(output:IDataOutput):void {
    output.writeObject("first string");
    output.writeObject(424242);
    output.writeObject("second string");
}
但是,当我尝试使用AMF序列化此类并将其发送到远程服务器(通过
RemoteObject
)时,Charles向我显示请求如下所示:

但我的序列化对象泄漏到请求的其余部分似乎是错误的


那么,我做错了什么?是否有我遗漏的文档部分?

您的代码看起来不错,但是您应该使用适当的方法进行序列化(writeUTF表示字符串,writeInt表示int等)。无论如何,Charles似乎无法正确处理实现IExternalizable的对象(我使用的是3.4.1版),因此您不应该依赖它所显示的内容


与您的问题没有直接关系-您真的需要使用IExternalizable吗?您将失去一些与AMF压缩算法相关的好处(除非您不打算在writeExternal方法中实现所有这些功能)。

使用“适当”的序列化方法有什么好处?如果你想说“它更有效率”,你能提供证据来支持这一说法吗?还有,我使用IExternalizable会失去什么压缩优势?不过,谢谢你提供有关Charles的提示。看起来,由于
IExternalizable
的实现方式,Charles无法知道对象在哪里停止,请求的其余部分继续。关于序列化方法,我认为代码看起来更好。我还假设与readObject相比有一些小的改进,但我还没有查看FP源代码。好处与AMF数据包的大小有关。默认的序列化算法能够检测重复的字符串和对象,并在流中再次找到对象时使用引用。如果使用自定义序列化,将失去此好处。我不久前写了一篇关于这个的博客文章