7

我有一个复杂的对象,它由 LCDS DataServices 数据管理进行管理,并使用自定义汇编程序创建/更新等。绝大多数对象层次结构都被正确地序列化/反序列化,但是在序列化不可变的 java 类时我遇到了一个绊脚石。

在只有 java 的世界中,我会使用 java writeReplace 和 readResolve 方法,正如这个优秀的博客所描述的那样:http: //lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/

这就是我最初编写 java 类的方式,期望 livecycle 调用 writeReplace 方法并将不可变类适当地替换为可变类以进行序列化。然而,lcds 似乎对 writeReplace 方法一无所知,只会调用 readExternal/writeExternal 忽略 readResolve 和 writeReplace。

首先,其他人是否发现是这种情况,或者我错过了什么?

其次,有没有人想出一种适当的方法来将 actionscript 类反序列化为不可变对象或单例?

非常感谢

4

3 回答 3

5

是的,这是一个普遍的问题。Adobe 建议具有不可变属性的 Java 类型实现 Externalizable,而等效的 ActionScript 类型实现 IExternalizable。

于 2009-11-04T08:51:27.180 回答
2

没有计划处理 writeReplace 和 readResolve,但您可以请求功能请求http://bugs.adobe.com/jira/browse/BLZ

在实现自定义序列化时,请注意您将失去一些好处,例如压缩数字和识别重复字符串。一个想法是查看实际的序列化机制并相应地对其进行修改。

但是,如果您只对序列化只读属性感兴趣,此增强功能已在 BlazeDS 中实现,请查看此处:http ://bugs.adobe.com/jira/browse/BLZ-427

于 2009-12-06T13:08:23.390 回答
1

我找到的最短和最全面的答案:http: //expertdevelopers.blogspot.com/2010/07/serializable-vs-externalizable.html

于 2011-11-03T22:38:44.523 回答