我有一个复杂的对象,由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类反序列化为不可变对象或单例?
非常感谢
答案 0 :(得分:5)
是的,这是一个常见的问题。 Adobe建议具有不可变属性的Java类型实现Externalizable,并且等效的ActionScript类型实现IExternalizable。
答案 1 :(得分:2)
没有计划处理writeReplace和readResolve,但您可以要求提供功能请求http://bugs.adobe.com/jira/browse/BLZ
实现自定义序列化时,请注意您将失去一些好处,例如压缩数字和识别重复的字符串。一个想法是查看实际的序列化机制并相应地修改它。
但是,如果您对序列化只读属性感兴趣,则此增强功能已在BlazeDS中实现,请查看此处:http://bugs.adobe.com/jira/browse/BLZ-427
答案 2 :(得分:1)