将表示XML的Java对象序列化为其XML形式是否合适?
我正在研究一些表示XML元素的Java对象。因为我目前使用的标准可能会变得有点笨拙,所以我正在使用大量JAXB对象(直接从.xsd生成)设计组合,并提供额外的功能以便于使用 因为我在Java中表示的对象是实际的XML对象,所以将它们序列化为XML是否合适?如果不是,为什么这是一个坏主意(除了性能原因) 编辑:将表示XML的Java对象序列化为其XML形式是否合适?,java,xml,design-patterns,serialization,jaxb,Java,Xml,Design Patterns,Serialization,Jaxb,我正在研究一些表示XML元素的Java对象。因为我目前使用的标准可能会变得有点笨拙,所以我正在使用大量JAXB对象(直接从.xsd生成)设计组合,并提供额外的功能以便于使用 因为我在Java中表示的对象是实际的XML对象,所以将它们序列化为XML是否合适?如果不是,为什么这是一个坏主意(除了性能原因) 编辑: 我收到了一些“你为什么要这么做?”类型的问题,让我解释一下。当对象的逻辑实现与物理实现(布洛赫的有效java,项目75)大不相同时,考虑定制序列化窗体通常是合适的。在我的例子中,物理形式将
我收到了一些“你为什么要这么做?”类型的问题,让我解释一下。当对象的逻辑实现与物理实现(布洛赫的有效java,项目75)大不相同时,考虑定制序列化窗体通常是合适的。在我的例子中,物理形式将与逻辑形式显著不同,并且自定义串行表示是合适的。由于对象总是能够用XML表示,因此在逻辑上似乎很合适,但我正试图用Java语言理解这一点的含义(即性能)。我怀疑这是一个好主意。xml表示可能需要大约100倍于二进制表示所需的空间。在使用xml文档序列化之前,我将使用java std序列化。(舒适但不高效) 更合适的是一些二进制xml表示。比如BSON for JSon或Google protobuf。查找二进制XML 因为我在Java中表示的对象是实际的XML对象,所以将它们序列化为XML是否合适 我猜你指的是类似于DOM的东西。然后使用一些XML绑定进行序列化。。。将DOM对象视为POJO 坏主意,依我看 如果不是,为什么这是一个坏主意(除了性能原因)
- 序列化和反序列化性能将很差
- 序列化的表单将膨胀
- 生成的XML将无法读取
- 序列化将很难处理任何其他内容。考虑尝试对它进行XSLT转换。考虑使用基于事件的解析器来处理它。
更新 您的解释(在您的更新/评论中)关于为什么这样做是不令人信服的: 当对象的逻辑实现与其物理实现大不相同(布洛赫的有效java,项目75)时,考虑定制序列化窗体通常是合适的。
布洛赫的建议是考虑使用自定义表示。其中隐含的是,假设你认为一个更好的自定义表示比你前面的标准表示。
在我的例子中,物理形式将与逻辑形式显著不同,并且自定义串行表示是合适的 这并不能解释为什么首先要用XML表示DOM。或者为什么你认为它更好 由于对象始终能够用XML表示,因此它在逻辑上似乎非常适合 你还没有解释这个逻辑 。。。但我试图用Java语言来理解这一点的含义(即性能) 正如我上面解释的那样。关于这一点,Java没有什么特别的好的,让我们从另一个角度来看这个问题
这与你在问题中所写的完全不同。如果这就是你的意思,它解释了为什么人们不理解你。。。并且认为你实际上说的没有什么意义。你是说序列化为XML文件吗?一般认为,出于性能原因,这不是一个好主意,但是,如果您打算将这些对象/xml文件用作另一个系统的提要,那么如果您主要关心的是能够根据XSD中定义的规则验证对象,则可能值得考虑,是一个如何工作的链接。有鉴于此,请注意将对象编组为XML将花费一些周期。一个重要的性能影响是创建JAXB上下文,您将使用它来封送对象。您可以通过在某种单例对象(POJO、Springbean等)中创建JAXB上下文来最大限度地降低这种性能影响,这样就不会每次都重新创建它。您所说的“实际XML对象”是什么意思?JAX-B可以序列化大多数java对象。。。是否需要它来满足您的业务需求?您不想不必要地封送和解封送,因为正如您所说的,这很昂贵。例如,Java中的SOAP对象表示XML—该对象应该始终能够用它实现的XML标准表示。至于JAXB部分,我正在使用一个包含JAXB元素的组合,这些元素表示