Properties.loadFromXML()和Properties.storeToXML()方法的目的是什么?

时间:2013-01-23 00:55:47

标签: java xml properties

我正在设计一个处理属性文件的简单库。

我注意到,自JRE 1.5以来,类Properties定义了类似的方法:

public synchronized void loadFromXML(InputStream in)
public void storeToXML(OutputStream os, String comment)

我质疑这是这个类的API的真正增强。自从JRE 1.5基于文本的文件以来,属性文件和新引入的XML格式没有添加任何功能,除了使用不同格式的可能性

  1. 更详细
  2. 更复杂(理解,改变,解析)
  3. 效率更低(它在内部使用dom解析为hastable:它消耗更多内存,在实现中需要辅助类,而且很可能也会更慢)
  4. 更脆弱(xml需要转义字符<>&“',而属性只需要转义反斜杠,因为它还支持Java反斜杠转义)
  5. 它破坏了使用它的程序的向后兼容性,因为运行JDK 1.4的用户将无法读取xml属性。 (好吧,谁在乎...)
  6. 所以我无法理解为什么Sun的工程师添加了这个功能的原因。

    问题是:

      

    是否有人发现使用基于XML的属性文件优于传统的基于文本的属性文件?

    我需要评估这个问题,因为我不想在我之前引用的简单库中添加一个无用的功能。

      

    您是否曾在Java Properties文件中使用过基于XML的属性文件?为什么?

    注意:对于Log4J xml文件格式可以提出同样的问题,但至少Log4J xml格式增加了嵌套能力和某种含义的语法,我明白这一点。但是对于属性的这种xml格式,我没有。

3 个答案:

答案 0 :(得分:2)

如果保留在Java环境中,使用Java属性文件效果很好。即使您希望其他编程语言与您的库进行交互,您也可以使用“常规”属性文件。但是,对于分层数据,XML是标准。您可能希望支持此更改的原因,以及可能是Sun包含此更改的原因是,其他编程语言具有用于解析分层数据的XML文件的扩展库。

我回答的原因是因为我之前实际使用过此功能!但不是一个很好的理由。在我正在研究的一个程序中,我发现最简单的方法是在属性对象中保存一组数据,然后将对象输出到XML,以便以后可以通过Python读取。目前,数据在Python脚本中进一步处理,并且更多子项被添加到XML文件中。如果不能轻松输出到XML,这将会更加痛苦。 如果我有时间,我不打算输出到XML。我使用接受XML的Python代码的主要原因是因为其他人写了它并且我暂时使用它,直到我有时间重新评估我的程序的那一部分并重新编码它。

因此使用XML是有原因的!这不是一个好的,但这是一个原因 我想在这样的其他情况下,将属性作为XML输出有助于与其他语言兼容,因为大多数语言都有一个强大的XML解析库,它使操作分层数据更容易。在科学编程中,似乎你很少能够坚持使用一种语言。

答案 1 :(得分:1)

有些观点:

  • 您可以使用标准的跨平台工具来创建它
  • 您不必担心转义和字符编码的特殊性,因为您可以使用标准工具,这实际上使其更加健壮。旧属性文件格式指定不当。
  • 标准的跨平台工具可以使用这些数据。
  • 对于大多数使用Java的应用程序,启动时间不会产生太大影响(特别是考虑到系统其余部分的启动时间)。
  • Java SE 1.6是完成其寿命终结的回合。 Pre-1.5与Java SE(或EE)并不特别相关。

但不,我从未见过它实际使用过。

答案 2 :(得分:1)

鼓励使用XML格式,因为编码:(按规格)严格的ASCII用于普通文件(我建议你http://mojo.codehaus.org/native2ascii-maven-plugin/),UTF-8(默认)用于XML属性文件,如{{ 3}}

编辑:请原谅:ISO-8859-1属性普通文件