我有一个复杂的对象,它由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类反序列化为不可变的对象或单例?
非常感谢
发布于 2009-11-04 16:51:27
是的,这是一个常见的问题。Adobe建议具有不可变属性的Java类型实现Externalizable,而等效的ActionScript类型实现IExternalizable。
发布于 2009-12-06 21:08:23
目前还没有处理writeReplace和readResolve的计划,但您可以请求一个功能请求http://bugs.adobe.com/jira/browse/BLZ
在实现自定义序列化时,要注意您会失去一些好处,比如压缩数字和识别重复字符串。一种想法是查看实际的序列化机制,并对其进行相应的修改。
但是,如果您只对序列化该增强在BlazeDS中实现的只读属性感兴趣,请查看此处:http://bugs.adobe.com/jira/browse/BLZ-427
发布于 2011-11-04 06:38:45
我找到的最简短和最全面的答案是:http://expertdevelopers.blogspot.com/2010/07/serializable-vs-externalizable.html
https://stackoverflow.com/questions/1524326
复制相似问题