Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java yaml与xml在对象图反序列化方面的优缺点是什么?_Java_Xml_Serialization_Yaml - Fatal编程技术网

Java yaml与xml在对象图反序列化方面的优缺点是什么?

Java yaml与xml在对象图反序列化方面的优缺点是什么?,java,xml,serialization,yaml,Java,Xml,Serialization,Yaml,该用例是以文本格式对复杂对象图进行长期序列化。如果使用YAML,则可能会有少量字节通过网络传输。我认为这还不够重要,但在某些情况下,这可能是相关的。我还认为YAML在文本编辑器中更容易阅读和使用,但这确实有点主观,如果这不是一个正常的使用场景,也没什么关系 如果带宽不是一个因素,并且您不会经常在文本编辑器中使用YAML/XML,那么我认为使用哪一种并不重要。简短回答 如果您希望人类创建/读取文档(配置文件、报告等),那么您可以考虑YAML,否则选择XML(用于机器对机器通信)。 长话短说 长度

该用例是以文本格式对复杂对象图进行长期序列化。

如果使用YAML,则可能会有少量字节通过网络传输。我认为这还不够重要,但在某些情况下,这可能是相关的。我还认为YAML在文本编辑器中更容易阅读和使用,但这确实有点主观,如果这不是一个正常的使用场景,也没什么关系

如果带宽不是一个因素,并且您不会经常在文本编辑器中使用YAML/XML,那么我认为使用哪一种并不重要。

简短回答

如果您希望人类创建/读取文档(配置文件、报告等),那么您可以考虑YAML,否则选择XML(用于机器对机器通信)。 长话短说 长度 XML和YAML大致相同。好的XML库可以跳过所有空格,而对于YAML则是必需的。复杂的YAML包含大量缩进空间(不要使用制表符!)

网络故障 YAML文档的一部分通常是有效文档,因此如果YAML文档不完整,则无法自动检测它。XML解析器将始终检查文档是否至少格式良好,并且可以根据模式自动检查有效性

语言支持 许多主要编程语言都支持XML和XML

常识 您不需要向开发人员(甚至初级开发人员)解释什么是XML。YAML还没有被广泛使用

模式 使用XML,生产者和消费者都可以在模式上达成一致,以建立可靠的数据交换格式

语法 XML非常丰富:名称空间、实体、属性

外部依赖 Java和Python在标准库中支持XML。YAML要求这些语言具有外部依赖性

成熟 XML规范比较古老,而且坚如磐石;然而,YAML仍在建设中。YAML 1.1包含不一致性(甚至有一个方法来维护错误列表)

XSLT
如果您需要将XML文档转换为另一种格式(XML、HTML、YAML、PDF),您可以使用XSLT,而对于YAML,您必须编写一个程序。

我同意:YAML更具可读性,并且似乎非常适合开发人员读/写配置文件。但是机器对机器的通信几乎没有什么好处。此外,对于文本标记(xml的传统优势,如xhtml、docbook),xml更好

特别是对于对象序列化,我想不出使用YAML的好理由

事实上,我建议改为考虑JSON:它基于对象(或者结构,因为没有行为)模型,而不是层次(xml)或关系(SQL)模型。因此,它更自然地适合对象数据。但是XML也可以很好地工作,并且有很多好的工具


最后一点:术语“长期”和“对象序列化”不能混用。后者意味着紧密耦合:对象会发生变化,序列化也会发生变化。实际对象序列化不应用于存储数据,数据绑定/映射更合适。但是,您可能是在“使用方便的对象包装器存储/恢复数据”的意义上使用序列化;如果是这样,那没关系。

XML有xpath和xquery

但是YAML有复杂的键,可以使用别名(&*语法)将一个值复制到多个位置

我认为亚马尔的优势不是他们说的人类可读性。。。我可以很好地阅读格式正确的XML

事实上,YAML的优势在于人类的书写能力。如果您在iPhone上,在构建数据模型时快速输入一些数据,那么YAML更容易输入。别名真是太棒了

然后你可以把它转换成任何东西

YAML更高级的特性,如严格的键入和标记,我从未使用过。YAML的家伙们目前正在讨论发行一个“微型YAML”来与JSON竞争,对于我们这些使用它的人来说,基本上就像使用别名的更干净的JSON一样


但是,正如其他人指出的那样,XML作为一种标记语言更好,在这种语言中,您希望直观地区分数据的哪些部分对最终用户可见

+1,尽管我不同意网络故障:在解析器参与之前,有足够多的层能够检测错误,即使它们失败,解析器也只会检测破坏xml良好格式的少数错误(基本上是:弄乱了,=,'或标记名)。