Flex RemoteObject:具有相同值的数组引用相同的内存

时间:2009-11-11 11:53:42

标签: flex arrays amf remoteobject

如果我将远程数据从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反序列化的方式吗?

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

AMF这样做是为了通过电线获得一些压缩。如果您不想这样,那么您可以切换到AMF0格式而不是AMF3。但我不确定如何用ZendAMF做到这一点。

答案 1 :(得分:0)

在AMF的Zend Framework实现上发现了ZF-7634错误。它错误地序列化了数组。

http://framework.zend.com/issues/browse/ZF-7634