Flex 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)
即:它们引用相同的数组对象。
如果我从远程服务器发送两个数组略有不同的值:
$this->test1 = array("foo", "bar");
$this->test2 = array("bar", "foo");
在 Flex 调试器中,TestVO 对象现在有两个独立的数组,如您所料:
test1 数组(@54cb7e9)
test2 数组(@54cb741)
AMF 输出 看起来 好吧,它总是为 test1/test2 发送两个单独的值,即使它们具有相同的值,所以我猜测这是 Flex 反序列化的方式?
有什么想法吗?谢谢。
If I send remote data from Zend_Amf to Flex, if two array properties on the object have the same data values they are deserialized at the remote end with the same memory storage.
Example: AS3 object:
Snippet:
[RemoteClass(alias="TestVO")]
public class TestVO
{
public var test1:Array;
public var test2:Array;
}
When this receives remote data from Zend_Amf server, if the array data are identical it allocates the same storage to the two arrays.
Eg: From remote (ZendAMF) object I send:
$this->test1 = array("foo", "bar");
$this->test2 = array("foo", "bar");
When I debug the TestVO object in Flex debugger I get:
test1 Array(@597d779)
test2 Array(@597d779)
ie: they reference the same array object.
If I send from the remote server slightly different values for the 2 arrays:
$this->test1 = array("foo", "bar");
$this->test2 = array("bar", "foo");
In the Flex debugger the TestVO object now has two seperate arrays as you'd expect:
test1 Array(@54cb7e9)
test2 Array(@54cb741)
AMF output looks Ok, it always sends two seperate values for test1/test2 even if they have the same values, so I'm guessing it's the way Flex de-serializes this?
Any ideas? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
AMF 这样做是为了通过线路获得一些压缩。如果您不想这样做,则可以切换到 AMF0 格式而不是 AMF3。但我不确定如何使用 ZendAMF 做到这一点。
AMF does this to gain some compression over the wire. If you don't want this then you can switch to the AMF0 format instead of AMF3. But I'm not sure how to do that with ZendAMF.
在 AMF 的 Zend Framework 实现上发现错误 ZF-7634。它错误地序列化了数组。
http://framework.zend.com/issues/browse/ZF-7634
Found bug ZF-7634 on Zend Framework implementation of AMF. It is serializing the arrays incorrectly.
http://framework.zend.com/issues/browse/ZF-7634