Che*_*eso 2 java xml xml-serialization
有一个相关问题什么是首选的Java XML绑定框架?
在目前排名第二的答案中,海报区分了XML序列化和Java/XML数据绑定.我可以说,XML数据绑定意味着"从XML文档创建内存中的对象图".XML序列化意味着"从内存中的对象图创建XML文档".
我没有看到它们完全不同,只是对同一个问题有不同的看法.
争论的焦点是数据绑定的重点在于对象模型,而序列化的重点在于文档格式.我根本没看到.如果将一个对象图序列化为XML,大概就是关注格式 - 它需要是可读的,可用的,可验证的.(如果格式不相关,那么为什么不只是使用二进制序列化并完成它?)另一方面,当执行"数据绑定"(我称之为反序列化)时,必须同时强调两者文档格式和对象模型.
所以问题是:Java/XML数据绑定和XML序列化
之间是否存在值得担心的区别?
不,这里有一个非常重要的概念差异,就像你提到的那样.可能是实现具有很强的相似性,并且可能导致混淆,但从概念上讲,它并不是那么不清楚.
数据绑定意味着将Java对象绑定到非对象内容(ORM,xml或json文档的关系数据等); 不同的表示(POJO,关系/层次数据)同样重要.数据绑定必须关注它支持的数据格式的细节; 某些功能在Java POJO中没有等效的构造(例如:XML混合内容,注释,处理指令,属性和元素之间的差异).数据绑定侧重于尝试桥接阻抗:允许尽可能在两个方向之间进行无缝转换.
使用对象序列化,您可以使用(Java)对象开始和结束 - 其他格式是次要问题,并且仅用于传递对象.他们可能会硬编码所用数据格式的精确结构; 但即使不是,也限制可以使用的各种构造.对象序列化必须处理特定于对象的事物:身份,引用,循环处理; 数据绑定器可以忽略的东西.
但是这里的问题可能会让人感到困惑:一般来说,对象序列化库(如XStream)提供了很大的灵活性来自定义外部格式(即使它不如对象重要).而且你当然可以使用数据绑定工具作为纯对象序列化工具的替代品 - 对于许多/大多数情况它们都能很好地工作.因此,您确实可以将工具用于"次要目的".但是有一些限制,取决于您需要的确切功能集:许多数据绑定工具无法处理循环引用; 对象序列化程序不能支持但是子集xml等等.即使您可以使用辅助工具,在易用性或性能方面,最好选择不同的方法.