我正在研究一些代表XML元素的Java对象。因为我正在使用的标准可能变得有点笨拙,所以我正在设计具有许多JAXB对象的组合(直接从.xsd生成)并提供易于使用的附加功能。
由于我在Java中表示的对象是实际的XML对象,将它们序列化为XML是否合适?如果没有,为什么这会是一个坏主意(除了表现原因)?
编辑:
我得到了一些“为什么你甚至想要这样做?”输入问题,让我解释一下。当对象的逻辑实现与其物理实现大不相同时,通常考虑自定义序列化表单(来自Bloch的Effective Java,第75项)。在我的例子中,物理形式与逻辑形式有很大不同,自定义序列表示是合适的。由于该对象总是能够用XML表示,所以它在逻辑上似乎很合适,但我试图用Java语言(I.E. performance)来理解它的含义。
答案 0 :(得分:1)
我怀疑这是一个goid想法。 xml表示可能需要大约100倍于二进制代表所需的空间。在我使用xml doc序列化之前,我会使用java std序列化。 (这很舒服,但效率不高)
更适合的是一些二进制xml表示。喜欢BSON for JSon或Google protobuf。寻找二进制XML。
答案 1 :(得分:0)
由于我在Java中表示的对象是实际的XML对象,是否适合将它们序列化为XML?
我认为你的意思是像DOM一样。然后你使用一些XML绑定序列化...将DOM对象视为POJO !!
不好主意,IMO。
如果没有,为什么这会是一个坏主意(除了表现原因)?
实际上,我很难想到任何可能是个好主意的理由。
<强>更新强>
你的解释(在你的更新/评论中)为什么这样做是不能令人信服的:
当对象的逻辑实现与其物理实现大不相同时,通常需要考虑自定义序列化表单(来自Bloch的Effective Java,第75项)。
Bloch的建议是考虑使用自定义表示。并且隐含在这个假设中,您认为自定义表示比您面前的标准表示更好。
就我而言,物理形式与逻辑形式有很大不同,自定义序列表示是合适的。
这并不能解释为什么你想首先用XML表示DOM。或者为什么你认为它更好。
由于该对象总是能够用XML表示,所以它在逻辑上似乎很合适,...
你没有解释那个逻辑。
...但我正在尝试用Java语言(I.E. performance)来理解它的含义。
其影响正如我上面所解释的那样。而且没有任何Java特定的内容。
好的,让我们从另一个角度看这个。
最终得到的Java对象的XML表示形式代表了一些表示原始信息的XML。
这比原始信息的XML表示更好吗?
现在,也许,如果在步骤3中你使用了jaxb并反序列化为自定义Java类......那么将这些Java类序列化是有意义的。但是你没有“代表XML元素的Java对象”。而是使用Java对象来表示由原始XML 表示的信息。
这与您在问题中实际写的内容完全不同。如果这就是你的意思,它就解释了为什么人们不理解你......并且认为你实际上说的是什么做得很少/没有意义。
答案 2 :(得分:0)
您的意思是序列化为XML文件吗?一般认为,出于性能原因,这不是一个好主意,但是如果您打算将这些对象/ xml文件用作另一个系统的源,那么它可能值得考虑
答案 3 :(得分:0)
如果您的主要关注点是能够根据XSD中定义的规则验证对象,this是指向其工作方式的链接。鉴于此,请注意将对象编组为XML将花费您一些周期。其中一个重要的性能命中是创建用于编组对象的JAXB上下文。您可以通过在某种单例对象(POJO,Spring bean等)中创建JAXB上下文来最小化此性能损失,因此不会每次都重新创建它。