Java XML序列化真的与XML数据绑定不同吗?如果是,又如何?

Java XML序列化真的与XML数据绑定不同吗?如果是,又如何?,java,xml,xml-serialization,Java,Xml,Xml Serialization,有一个相关的问题 在目前排名第二的答案中,海报区分了XML序列化和Java/XML数据绑定。据我所知,XML数据绑定意味着“从XML文档创建内存中的对象图”。XML序列化意味着“从内存中的对象图创建XML文档” 我看不出他们有什么不同,只是对同一个问题有不同的看法 争论的焦点是数据绑定的重点是对象模型,而序列化的重点是文档格式。我一点也看不出来。如果要将一个对象图序列化为XML,那么可能需要考虑格式——它需要可读、可工具、可验证。(如果格式不相关,那么为什么不直接使用二进制序列化并使用它呢?)另

有一个相关的问题

在目前排名第二的答案中,海报区分了XML序列化和Java/XML数据绑定。据我所知,XML数据绑定意味着“从XML文档创建内存中的对象图”。XML序列化意味着“从内存中的对象图创建XML文档”

我看不出他们有什么不同,只是对同一个问题有不同的看法

争论的焦点是数据绑定的重点是对象模型,而序列化的重点是文档格式。我一点也看不出来。如果要将一个对象图序列化为XML,那么可能需要考虑格式——它需要可读、可工具、可验证。(如果格式不相关,那么为什么不直接使用二进制序列化并使用它呢?)另一方面,在执行“数据绑定”(我称之为反序列化)时,必须平衡强调文档格式和对象模型

所以我想问你:

Java/XML数据绑定和XML序列化之间是否存在值得担心的差异

诸如XStream之类的库提供XML序列化(而不是XML文档处理),因此对象图可以使用标准Java序列化语义来保存/恢复


序列化表单可能不是您希望在java环境之外使用的文档,因为它可能嵌入java类名(尽管您可以使用别名更改它)。

在许多情况下,区别很小。您的问题的答案是:这取决于您的用例。例如,请参见Wikipedia的条目,该条目以:

XML数据绑定是指表示信息的过程 在XML文档中作为计算机内存中的对象

通过比较,请参见的页面,这是一个序列化框架:

XStream是一个简单的库,用于将对象序列化为XML并再次序列化

因此,对于XML数据绑定,XML格式是“主要”格式,即具有显式定义的数据版本。Java(或C#或…)对象是XML的表示形式。但是,对于序列化,对象是定义、“主要”格式,XML表示是次要的

基本上,当您有两种格式的相同数据时——一种是您选择的语言中的对象,另一种是XML表示形式——对于大多数用途,这两种格式中的一种是主要的,另一种是次要的。当XML格式是主要格式时,您谈论的是XML数据绑定。当对象是主对象时,您谈论的是序列化


对于序列化,为什么要使用XML而不是二进制格式?嗯,数据的XML格式更有可能是人类可读的,更有可能处理对象的更改(例如,添加新字段),在具有不同字节顺序的机器之间移动序列化对象时不太可能遇到编码问题,等等。XML是以一种已知且易于理解的方式构造的,并且XML在处理新字段和新元素方面具有高度的灵活性。二进制格式通常是自行开发的,对于您的序列化格式的未来更改而言,可能很脆弱,也可能不脆弱。

感谢您的所有输入。考虑到这一切,我仍然觉得这种区别是人为的。主要的,重要的次要的它让人感觉主观、模糊、武断和人为。这告诉我没有什么有意义的区别

不,正如你提到的,这里有一个非常重要的概念上的差异。 这可能是因为实现有很强的相似性,这可能会导致混淆,但从概念上讲,这并不清楚

数据绑定是指将Java对象绑定到非对象内容(用于ORM、xml或json文档等的关系数据);不同的表示(POJO、关系/层次数据)也同样重要。数据绑定必须关注其所支持的数据格式的细节;一些特性在JavaPOJO中没有等价的结构(例如:XML混合内容、注释、处理指令、属性和元素之间的差异)。数据绑定的重点是尝试桥接阻抗:允许尽可能无缝地在表示之间以及在两个方向上进行转换

对于对象序列化,您以(Java)对象开始和结束—其他格式是次要的,并且只用于传递对象。他们可以硬编码使用的数据格式的精确结构;但即使没有,也要限制可以使用的构造类型。 对象序列化必须处理对象特有的事情:标识、引用、循环处理;数据绑定器可以忽略的事情

但这里有一点可能会让人困惑:一般来说,对象序列化lib(如XStream)提供了大量定制外部格式的灵活性(尽管它不如对象重要)。您当然可以使用数据绑定工具作为纯对象序列化工具的替代品——在许多/大多数情况下,它们工作得非常好。
因此,您确实可以将工具用于“次要目的”。但也有局限性,这取决于您需要的确切功能集:许多数据绑定工具无法处理循环引用;对象序列化程序只能支持xml子集等。即使在可以使用辅助工具的地方,在易用性或性能方面,您最好选择不同的工具。

谢谢您的帮助。即使读了这篇文章,我仍然觉得这种区别是人为的。主要的,重要的次要的它让人感觉主观、模糊、武断和人为。这告诉我没有什么有意义的区别。ps:我关于“为什么使用XML”的问题是修辞性的。好吧,对于XML数据绑定,您可能需要创建一个XML模式,然后