如果我将远程数据从Zend_Amf发送到Flex,如果对象上的两个数组属性具有相同的数据值,则它们在远程端具有相同的内存存储器进行反序列化。
示例:AS3对象:
段:
[RemoteClass(alias="TestVO")]
public class TestVO
{
public var test1:Array;
public var test2:Array;
}
当从Zend_Amf服务器接收远程数据时,如果阵列数据相同,则为两个阵列分配相同的存储。
例如:我发送的远程(ZendAMF)对象:
$this->test1 = array("foo", "bar");
$this->test2 = array("foo", "bar");
当我在Flex调试器中调试TestVO对象时,我得到:
test1数组(@ 597d779)
test2数组(@ 597d779)
ie:它们引用相同的数组对象。
如果我从远程服务器发送2个数组的值略有不同:
$ this-> test1 = array(“foo”,“bar”);
$ this-> test2 = array(“bar”,“foo”);
在Flex调试器中,TestVO对象现在有两个独立的数组:
test1数组(@ 54cb7e9)
test2数组(@ 54cb741)
AMF输出看起来好吧,它总是为test1 / test2发送两个单独的值,即使它们具有相同的值,所以我猜这是Flex反序列化的方式吗?
有什么想法吗?感谢。
答案 0 :(得分:2)
AMF这样做是为了通过电线获得一些压缩。如果您不想这样,那么您可以切换到AMF0格式而不是AMF3。但我不确定如何用ZendAMF做到这一点。
答案 1 :(得分:0)
在AMF的Zend Framework实现上发现了ZF-7634错误。它错误地序列化了数组。