由于我在 Java 中表示的对象是实际的 XML 对象,将它们序列化为 XML 是否合适?
我假设您的意思是 DOM 之类的东西。然后您使用一些 XML 绑定进行序列化......将 DOM 对象视为 POJO !
坏主意,海事组织。
如果不是,为什么这是一个坏主意(除了性能原因)?
- 序列化和反序列化性能会很差。
- 序列化的表单会臃肿。
- 生成的 XML 将不可读。
- 序列化将难以处理其他任何事情。考虑尝试对其进行 XSLT 转换。考虑尝试使用基于事件的解析器来处理它。
实际上,我正在努力思考这可能是个好主意的任何原因。
更新
您对为什么这样做的解释(在您的更新/评论中)没有说服力:
当对象的逻辑实现与其物理实现有很大不同时(来自 Bloch 的 Effective Java,第 75 条),考虑自定义序列化形式通常是合适的。
Bloch 的建议是考虑使用自定义表示。其中隐含的假设是,您认为自定义表示比您面前的标准表示更好。
在我的情况下,物理形式将与逻辑形式有很大不同,并且自定义序列表示是合适的。
这并不能解释为什么您首先要在 XML 中表示 DOM。或者为什么你认为它更好。
由于该对象总是能够由 XML 表示,因此在逻辑上看起来很合适,...
你没有解释这个逻辑。
...但我试图理解这对 Java 语言(IE 性能)的影响。
那么影响就像我上面解释的那样。Java 对此并没有什么特别之处。
好的,让我们从另一个角度来看这个。
- 你有一些信息。
- 您用 XML 表示该信息。
- 您解析 XML 以提供内存中的表示形式 - DOM。
- 您应用 jaxb 之类的东西来为您提供 DOM 的 XML 表示......被视为 POJOS
- 你序列化 DOM。
您最终会得到一个 Java 对象的 XML 表示,这些对象表示一些表示您的原始信息的 XML。
这比原始信息的 XML 表示形式更好吗?
现在,也许,如果在步骤 3 中您使用了 jaxb 并反序列化为自定义 Java 类……那么将这些 Java 类序列化为有意义。但是你没有“代表 XML 元素的 Java 对象”。相反,您拥有表示原始 XML 所表示的信息的 Java 对象。
这与您在问题中实际写的内容完全不同。如果这就是你的意思,它解释了为什么人们不理解你......并且认为你实际上说的话几乎没有意义。