完全像NetConnection一样序列化到AMF

时间:2012-03-15 01:55:42

标签: actionscript-3 flash serialization amf

我想将一个对象序列化为AMF,我希望结果与NetConnection.call()序列化的结果完全相同。所以,我使用ByteArray.writeObject(),输出字节通常与NetConnection.call()发送的字节相同,但有时几个字节是不同的。

我在AMF3规范中发现了这一点:“请注意,ByteArray.writeObject使用一个版本的AMF来编码整个对象。与NetConnection不同,ByteArray不会在AMF 0中启动并切换到AMF 3(将objectEncoding属性设置为AMF 3)。“它解释了差异。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

NetConnection.call的工作方式以及如何构建有效的请求和响应的详细信息请参见第4节中的AMF0 specs .NetConnection.call还有一些附加功能,如标头,RPC方法名称和请求是否成功或遇到错误。这就是为什么你不能只使用writeObject创建一个有效的请求。

关于从AMF0切换到AMF3的这一点是由于并非每个AS3对象都可以在AMF0中没有数据丢失的情况下写入,但原始Flash播放器都假设主体将在AMF0中。在编码期间,如果您已指定要使用AMF3进行编码,则会在AMF3模式下调用writeObject之前写出AMF0到AMF3标记(0x11)。