Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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属性:。属性文件与xml?_Java_Xml_Properties - Fatal编程技术网

Java属性:。属性文件与xml?

Java属性:。属性文件与xml?,java,xml,properties,Java,Xml,Properties,说到属性,我是个新手,我读到XML是存储这些属性的首选方式。但是,我注意到,以 foo=bar fu=baz 同样有效。这意味着打字要少很多(而且可能更容易阅读,效率也更高)。那么,使用XML文件有什么好处呢?如果有大量重复数据,处理起来会更简单 <connections> <connection>this</connection> <connection>that</connection> <connection&

说到属性,我是个新手,我读到XML是存储这些属性的首选方式。但是,我注意到,以

foo=bar
fu=baz

同样有效。这意味着打字要少很多(而且可能更容易阅读,效率也更高)。那么,使用XML文件有什么好处呢?

如果有大量重复数据,处理起来会更简单

<connections> <connection>this</connection> <connection>that</connection> <connection>the other</connection> </connections> connection1=this connection2=that connection3=the other 这 那个 其他的 而不是处理

<connections> <connection>this</connection> <connection>that</connection> <connection>the other</connection> </connections> connection1=this connection2=that connection3=the other 连接1=此 连接2=那 连接3=另一个 尤其是如果您希望必须存储大量数据,或者必须将其存储在特定的层次结构中


但是,如果您只是存储一些标量值,我会选择简单属性方法,每次在XML中,您可以存储比属性文件更复杂(例如,层次结构)的数据。因此,这取决于您的用例。如果您只想存储少量的直接属性,那么属性文件更容易处理(尽管Java属性类也可以读取基于XML的属性)


无论如何,让您的配置界面尽可能通用是有意义的,这样您就可以在需要时切换到另一种表示形式(例如使用)。XML对于复杂的数据结构和/或关系非常方便。它在系统之间拥有一种“通用语言”,这是一项相当不错的工作

然而,xml是有代价的。它很难消费。你必须加载一个解析器,确保文件格式正确,找到信息等等


而属性文件重量很轻,易于阅读。适用于简单的键/值对。

这取决于您正在编码的数据。使用XML,您可以在应用程序中定义更复杂的配置数据表示形式。以struts框架为例。在这个框架中,您有许多Action类,它们可以包含1…n个转发分支。使用XML配置文件,您可以将其定义为:

<action class="MyActionClass">
  <forward name="prev" targetAction="..."/>
  <forward name="next" targetAction="..."/>
  <forward name="help" targetAction="..."/>
</action>

仅使用属性文件的键值对表示很难实现这种关联。最有可能的情况是,您需要提出一个定界字符,然后在由该定界字符分隔的单个属性上包含所有正向操作。对于一个黑客解决方案来说,这是一项相当艰巨的工作


但是,正如您所指出的,如果您只想声明一些非常简单的内容,比如将feature blah设置为true,那么XML语法可能会成为一个负担。

使用XML文件的最大好处是XML声明了它的编码,而.properties则不会


如果要将这些属性文件转换为N种语言,则这些文件可能会以N种不同的编码返回。如果您不小心,您或其他人可能会不可逆转地破坏字符编码。

如果您同时拥有分层数据和重复的名称空间,则使用XML

1) 要仅模拟属性文件中的层次结构,只需使用点表示法:

a.b=The Joker
a.b.c=Batgirl
a.b=Batman
a.b=Superman
a.b.c=Supergirl
因此,复杂(分层)数据表示不是使用xml的理由

2) 对于重复数据,我们可以使用像ini4j这样的第三方库在java中显式地将计数标识符固定在属性文件本身的隐式量词上

a.b=The Joker
a.b=Batgirl
a.b=Batman
翻译成(在后台)

但是,计算同名属性仍然无法维护特定的父子关系。我们如何表示蝙蝠侠是和小丑在一起还是和蝙蝠侠在一起

因此,当这两种特性都需要时,就需要xml。现在我们可以决定第一个xml条目是我们想要的还是第二个

[a]
   [b]Joker[/b]
   [b]
       [c]Batgirl[/c]
   [/b]
[a]
--或--

更多详情请参阅。。。。
XML的缺点:

  • 它很难阅读-标签让它看起来比实际更繁忙
  • 层次结构和标记使其难以编辑,更容易出现人为错误
  • 不可能“附加”到XML属性文件以引入新属性或为现有属性提供覆盖值以使最后一个属性获胜。附加属性的功能非常强大—我们可以围绕此实现属性管理逻辑,以便某些属性是“热的”,并且在这些属性发生更改时不需要重新启动实例

  • Java属性文件解决了上述问题。一致的命名约定和点表示法有助于解决层次结构问题。

    是的,我计划对不同的值使用它。所有数据均未与其他文件共享。仅供参考:java.util.Properties类不支持XML:Edit:上面的URL已损坏。结束部分应为链接的一部分。在得出结论之前,请检查/添加Mike Sickler的答案。你当然不想错过他的观点,那完全是错误的。Java属性文件被定义为使用ISO8859_1作为编码,每隔一次编码都会违反规范。请参阅以了解更多信息。Dude-它没有在文件中“声明”其编码。你没有领会我的意思。文本编辑器或其他工具将遵循XML文件声明的编码,但由于属性文件没有这样的声明,因此由用户决定保存它的编码。如果您正在进行翻译,那么这会带来麻烦。“Java属性文件被定义为使用ISO-8859-1作为编码”。错。仅当使用旧方法“load(InputStream)/store(OutputStream,String)”(简单地使用“load(Reader)/store(Writer,String)”(并以正确的编码打开文件)时,才需要/假设您可以使用UTF-8或任何东西。同意它,它会损坏文件。。。你可以用法语获取属性文件,在windows IntellijIdea上打开它,在linux上用IntellijIdea打开相同的文件。您将得到corruptionHi Kjetil,这里的要点是属性条目可以表示什么,xml条目可以表示什么。从根本上说,因为属性条目缺少紧密的语义,所以它是stru