将Java对象图另存为XML文件

时间:2020-03-05 18:53:24  来源:igfitidea点击:

将任意Java对象图另存为XML文件(以及以后可以重新水化对象)的最简单易用的技术是什么?

解决方案

回答

Apache摘要器非常简单:http://commons.apache.org/digester/
JAXB较新,并且具有注释优点:https://jaxb.dev.java.net

回答

java.beans.XMLEncoder也许?

回答

XStream非常简单http://x-stream.github.io/

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

回答

这里最简单的方法是序列化对象图。
Java 1.4内置了对序列化为XML的支持。

我成功使用的一个解决方案是XStream(http://x-stream.github.io/),它是一个小型库,可以轻松地使我们从XML序列化和反序列化。

缺点是我们只能非常有限地定义生成的XML。在情况下,这可能不是必需的。

回答

简单的API很简单!真的很棒。 http://simple.sourceforge.net/

我们也可以使用XStream:http://www.ibm.com/developerworks/library/x-xstream/index.html

回答

Thoughtworks团队的XStream具有一个简单的API,甚至可以处理重复和循环引用之类的事情。它似乎正在积极开发并且有据可查。

http://x-stream.github.io/

回答

如果我们真的只想将对象序列化为文件,然后在以后反序列化它们,则可以签出YAML而不是XML。与XML相比,YAML更加易于使用,并且输出文件非常易于阅读(可能是强制要求,也可能不是强制要求)。请查看yaml.org以获取更多信息。我在最近的项目中成功使用了JYAML。

回答

如果我们需要控制XML的结构,那么XStream是一个不错的选择。我们可以使用批注精确定义XML和对象的结构/映射。

回答

使用java.beans.XMLEncoder。它的API非常简单(实际上有点太简单了;将其连接到SAX ContentHandler会很不错),但是它可以直接用于许多图形,并且可以很容易地为任何奇数创建自己的持久性委托。我们可能会遇到的舞会。

  • XMLDecoder使用的语法允许我们调用任何方法,实例或者静态方法,包括构造函数,因此它非常灵活。
  • 其他编码器在类和字段名称之后命名元素和属性,因此结果没有固定的模式。 XMLEncoder的XML遵循一个简单的DTD,即使我们从未见过它使用的类型,也可以轻松地对其进行验证或者转换。
  • 我们可以为对象分配一个标识符,并在整个图形中对其进行引用。
  • 我们可以引用在类或者接口中定义的常量。

而且,它内置于Java SE中,因此我们无需交付额外的库。

回答

JAX-B是标准API的一部分,非常易于使用。

回答

我将使用第二(或者第三)XStream。它可以读取和写入XML,而无需任何特殊的绑定配置或者在XML中放置大量无关的语法。

回答

如果我们需要控制生成的XML,我建议我们看一下Betwixt(http://commons.apache.org/betwixt/),它为Apache的摘要器增加了很多功能(Digester可用于从XML,但对于生成它们不是很好。

如果我们真的不关心生成的XML(只是将来可以反序列化),则Java内置的XMLEncoder / Decoder类或者只要我们要序列化的对象遵循JavaBean规范就可以。关于XMLEncoder / Decoder解决方案,我遇到的最大问题是,如果我们有一个bean返回了其中一个属性的不可变列表,则编码器无法很好地处理这种情况。

回答

尽管XStream和JAXB可以成功地序列化某些对象图,但是它们不能处理非常复杂的图。对于大型复杂图形,最强大的解决方案是简单XML序列化。它可以处理任何图形。此外,它的快速和易于使用,没有任何依赖关系。

引用简单项目页面:

Simple is a high performance XML serialization and configuration framework for Java. Its goal is to provide an XML framework that enables rapid development of XML configuration and communication systems. This framework aids the development of XML systems with minimal effort and reduced errors. It offers full object serialization and deserialization, maintaining each reference encountered. In essence it is similar to C# XML serialization for the Java platform, but offers additional features for interception and manipulation.

回答

我整理了一个列表,其中包含许多xml序列化库及其许可证