java中的属性文件是如何工作的?

java中的属性文件是如何工作的?,java,properties-file,Java,Properties File,我在java中多次使用属性文件来存储静态值并从程序中删除硬编码代码。但我只使用了很少的值,比如说数百个值。但是,我很好奇属性文件实际上是如何工作的 他们如何操作和存储文件中给定的值 它们的效率有多高,即,如果我们在属性文件中使用数千个值,它的效率是否与具有小值的属性文件的效率相同?如果所需的处理量呈线性增加,或者处理开销很高?Properties类扩展了Hashtable,因此它的效率与具有字符串键的Hashtable一样,这是非常有效的。Properties类扩展了Hashtable,因此它的

我在java中多次使用属性文件来存储静态值并从程序中删除硬编码代码。但我只使用了很少的值,比如说数百个值。但是,我很好奇属性文件实际上是如何工作的

他们如何操作和存储文件中给定的值


它们的效率有多高,即,如果我们在属性文件中使用数千个值,它的效率是否与具有小值的属性文件的效率相同?如果所需的处理量呈线性增加,或者处理开销很高?

Properties类扩展了Hashtable,因此它的效率与具有字符串键的Hashtable一样,这是非常有效的。

Properties类扩展了Hashtable,因此它的效率与具有字符串键的Hashtable一样,这非常有效。

您可以在代码中看到

public class Properties extends Hashtable<Object,Object>
 {
       // ... code
    }
公共类属性扩展哈希表
{
//…代码
}
它扩展了
哈希表
类,因此它的效率很高,您还可以在
属性
类中检查javadoc的
设置属性
存储
加载
方法。

您可以在代码中看到

public class Properties extends Hashtable<Object,Object>
 {
       // ... code
    }
公共类属性扩展哈希表
{
//…代码
}

它扩展了
哈希表
类,以提高其效率,您还可以在
属性
类中检查javadoc的
设置属性
存储
加载
方法。

使用
java.util.Properties
操作属性文件的一个问题是会去掉任何注释

考虑改用
org.apache.felix.utils.properties.properties
(它构建在

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.utils</artifactId>
        <version>1.6.0</version>
    </depenency>

org.apache.felix
org.apache.felix.utils
1.6.0
其中将保留注释、顺序、空白等


插入的性能代价是O(log(n))和条目数。

使用
java.util.properties
操作属性文件的一个问题是,它会去掉任何注释

考虑改用
org.apache.felix.utils.properties.properties
(它构建在

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.utils</artifactId>
        <version>1.6.0</version>
    </depenency>

org.apache.felix
org.apache.felix.utils
1.6.0
其中将保留注释、顺序、空白等

插入的性能代价是O(log(n))以及条目数。

下面是一个简单的例子;它非常简单。文件在一次O(n)传递中进入一个
哈希表,该哈希表有O(1)个插入和检索。返回文件的属性类似于O(n).数千把钥匙,甚至数万把钥匙都不会有问题

这听起来像是设想
Properties
类在每次修改文件或每次访问属性时都重新读取文件。这不是
Properties
的工作方式,这样做是非常浪费的。
Properties
本质上是一个美化的
Map
实现,有额外的读取方法然后将其内容写入文件。

这是一个简单的方法;它非常简单。文件在一次O(n)传递中进入一个
哈希表
,该哈希表有O(1)个插入和检索。返回文件的属性类似于O(n)。数千个键,甚至上万个键都不会有问题


这听起来像是设想
Properties
类在每次修改文件或每次访问属性时都重新读取文件。这不是
Properties
的工作方式,这样做是非常浪费的。
Properties
本质上是一个美化的
Map
实现,有额外的读取方法并将其内容写入文件。

您有什么问题吗?@Puce正如我在问题中所说的,我很“好奇”。事实上,我正在从事某个项目,并使用属性文件。事实上,我正在使用此程序的设备的计算和内存资源有限,这就是我想知道的原因。不过,我也有一个替代解决方案,但我仍然想知道它,请您参考一些详细说明的链接。谢谢。哟你可以查看源代码来查看实现。你有什么问题吗?@Puce正如我在问题中所说的,我很“好奇”。事实上,我正在从事某个项目,并使用属性文件。事实上,我正在使用此程序的设备的计算和内存资源有限,这就是我想知道的原因。不过,我也有一个替代解决方案,但我仍然想知道它,请您参考一些详细说明的链接。谢谢。哟您可以查看源代码以查看实现。好的,但是使用streams从文件中读取并将其放入hastable中仍然会有开销。我说得对吗?您说得对!!在这种情况下,我们可以使用我们自己的方法。您所说的“自己的方法”是什么意思?请解释一下?IO性能成本将比插入映射的成本高出几个数量级。你真的不必担心它。@Bruce_Wayne这里我指的是类似
ResourceBundle
的东西,但我同意@Donaldokay的观点,但使用流从文件中读取并放置它仍然会带来开销我说得对吗?你说得对!!那样的话我们可以用我们自己的方法。你说的“自己的方法”是什么意思?请解释?IO性能成本将比插入映射的成本高出几个数量级。你真的不必担心它。@Bruce_Wayne这里我指的是类似
ResourceBundle
的东西,但我同意@Donald@Prashant是的,我知道是这一个或那一个。以前应该仔细检查一下。修好了我的回答。@Prashant是的,我知道是一个或另一个。之前应该仔细检查一下。修复