【问题标题】:Serialize to AMF exactly like NetConnection does像 NetConnection 一样序列化到 AMF
【发布时间】:2012-03-15 01:55:41
【问题描述】:

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

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

我该如何解决这个问题?

【问题讨论】:

  • 小提示:检查 AMFPHP,PHP 编码器是如何工作的,因为它使用 NetConnection => php 编码。

标签: actionscript-3 flash serialization amf


【解决方案1】:

NetConnection.call 的工作方式以及如何构造有效的请求和响应在第 4 节的AMF0 specs 中有详细记录。NetConnection.call 具有一些附加功能,例如标头、RPC 方法名称以及是否不是请求成功或遇到错误。这就是为什么不能只使用 writeObject 来创建有效请求的原因。

关于从 AMF0 切换到 AMF3 的问题是因为并非每个 AS3 对象都可以写入而不会丢失 AMF0 中的数据,但最初的 Flash 播放器都假设主体将在 AMF0 中。发生的情况是,在编码过程中,如果您指定要使用 AMF3 进行编码,它会在 AMF3 模式下调用 writeObject 之前写出一个 AMF0 到 AMF3 标记 (0x11)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多