使用XStream的Externalizable类的默认Java序列化

时间:2012-09-04 02:21:24

标签: java serialization xstream externalizable

我正在使用XStream作为我的应用程序的一部分来序列化对象。对于其中一个用例,我必须序列化一些实现Externalizable接口的对象。对于我的用例,我想使用本机Java序列化来序列化它们。

我在互联网上找到了一个链接http://old.nabble.com/How-to-remove-Externalizable-Converter-td22747484.html,它帮助我解决了这个问题并开始使用Reflection Converter for Externalizable对象。

在测试应用程序时,我发现在高度并发访问期间,应用程序在转换器代码中花费了大量时间(10秒)。我可以看到问题出在FieldDictionary的buildMap方法中。

我想知道是否有更好的方法来解决我的原始问题?在具有高度并发环境的情况下,Reflection Converter的性能是否会出现问题?

为环境提供一些额外的背景信息。它是一个Web应用程序,在请求处理期间发生序列化,应用程序可以有100个并发线程。

我真的很感激有关此事的任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

这在技术上不是答案..但我希望它无论如何都有帮助。

在创建用于生物分子研究建模的基于Java Swing的桌面应用程序时,出于性能原因,我们将非常复杂且互连的对象图序列化到磁盘。

即使在完成Externalization和Serializable相关问题之后,我们也不得不放弃整个方法并重新开始,因为Java序列化对对象结构/名称等非常敏感。这意味着模型的无辜重构导致了主要问题。当用户试图加载旧的序列化模型时,生产中崩溃。

最终我们创建了一个数据存储友好的对象结构(没有对图中其他节点的强引用),并序列化了这个结构。这比原始图的序列化和反序列化要简单得多,不易出错且速度快得多。这也意味着我们可以随意重构/修改我们的域图对象,只要适配器(将Domain对象转换为DataStore对象的组件)保持正确更新。