2

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

我注意到自 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 属性。(好吧,谁在乎……)

所以我无法理解 Sun 的工程师添加此功能的原因。

问题是:

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

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

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

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

4

3 回答 3

2

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

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

所以使用 XML 是有原因的!这不是一个好人,但这是一个原因。
我想还有其他类似的情况,其中将属性作为 XML 输出有助于与其他语言的兼容性,因为大多数语言都有一个健壮的 XML 解析库,并且它可以更容易地操作分层数据。而在科学编程中,你似乎很少能坚持使用一种语言。

于 2013-01-23T02:39:41.890 回答
1

几点:

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

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

于 2013-01-23T01:05:50.047 回答
1

由于编码,Afaik 鼓励使用 XML 格式:(按规范)对于纯文件(我建议您http://mojo.codehaus.org/native2ascii-maven-plugin/)严格使用 ASCII,UTF-8(默认)对于http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Properties.html中所述的 XML 属性文件

编辑:对不起:ISO-8859-1 for property plain files

于 2013-01-23T21:48:06.317 回答