当前位置: 首页 > 知识库问答 >
问题:

使用属性类加载地图

狄飞尘
2023-03-14

我有一张75000个条目的地图,每个条目的值平均大小为10kb。

我使用Properties类将此映射加载到内存中。但是由于映射的大小,当主机上的RAM很小时,我会得到OutOfMemoryException。

我有一个选择,就是将条目成批(比如10000)读入内存,而不是加载完整的映射。在处理初始10k后读取下一个10k。

是否有任何方法可以使用Properties类来完成此任务。

此外,有没有更好的方法以这种方式加载地图条目?

感谢和问候,
Sujith

共有2个答案

雍飞雨
2023-03-14

我假设您不需要同时加载所有属性,而是需要遍历所有属性。就我个人而言,我会逐行手动解析文件,并以流式方式工作。如果有一个用于处理非常大的属性的库,我不知道。

路阳华
2023-03-14

不要使用属性,这是遗产

>

按顺序读取每个文件,使用首选项加载和处理

示例代码:

package com.mypack.test;

import java.io.*;
import java.util.*;
import java.util.prefs.Preferences;

public class PreferencesExample {

    public static void main(String args[]) throws FileNotFoundException {
        Preferences ps = Preferences.userNodeForPackage(PreferencesExample.class);
        // Load file object
        File fileObj = new File("d:\\data.xml");
        try {
            FileInputStream fis = new FileInputStream(fileObj);
            ps.importPreferences(fis);
            System.out.println("Prefereces:"+ps);
            System.out.println("Get property1:"+ps.getInt("property1",10));

        } catch (Exception err) {
            err.printStackTrace();
        }
    }
}

xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preferences SYSTEM 'http://java.sun.com/dtd/preferences.dtd'>
<preferences EXTERNAL_XML_VERSION="1.0">
<root type="user">
<map />
<node name="com">
  <map />
  <node name="mypack">
    <map />
    <node name="test">
      <map>
        <entry key="property1" value="80" />
        <entry key="property2" value="Red" />
      </map>
    </node>
  </node>
</node>
</root>
</preferences>
 类似资料:
  • 问题内容: foo类有一个酒吧。除非访问,否则不会加载钢筋。进一步访问bar应该不会产生任何开销。 是否可以使用属性或更好的属性来执行类似的操作,而不是使用getter方法? 目标是在所有后续访问中无负载地延迟加载… 问题答案: 当前的答案存在一些问题。具有属性的解决方案要求您指定其他类属性,并且在每次查找时都要检查该属性。该解决方案的问题在于,它会隐藏该属性,直到首次访问。这不利于自省,并且不便

  • 问题内容: 我希望对我在Spring中涉及到属性文件的问题有所帮助。所以我的设置是这样的: opto-mapping.properties –该文件位于我的src文件夹中,其中包含针对我的优化资源的翻译,如下所示: 每次运行“优化”构建时,都会更新此属性文件。然后我用 将属性文件导入所需的jsp中。然后通过使用以下内容引用内容: 除了属性文件需要重新启动tomcat重启外,所有这些工作都很漂亮。我

  • 我在尝试添加

  • 问题内容: 我已经看过几次,并尝试了一些建议,但都没有成功(到目前为止)。我在以下路径上有一个maven项目和属性文件: 我正在尝试将其加载到Singleton类中以通过键访问属性 但是我在运行时遇到了NullPointerError的问题。我已经完成了所有可以想到的操作,但是无法找到/加载文件。 有任何想法吗? 堆栈跟踪: 问题答案: 您应该实例化您的对象。另外,您还应该使用以下路径加载资源文件

  • 问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA

  • 问题内容: 我在Spring 3中使用属性文件。当Spring初始化其contex时,它将加载属性文件,并将其放入带有@Value批注的所有bean中。 我希望有可能更新文件中的某些属性,并在服务器上公开一个JMX,该JMX将新属性重新加载到Spring中-无需重新启动服务器并重新加载其上下文。 我可以通过使用一些 Spring方法 来重新加载属性并将其填充到所有bean中来实现此功能,还是应该自

  • 我已经写了一个PropertyUtils类(来自互联网),它将加载属性 PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil来获取属性。getProperty()方法。 但现在我想稍微修改一下,如果myApp。属性被用户修改/更改,应该重新加载 可能我需要FileWatcher类 但我的疑虑是 如何使用classpath创建File对象:myApp/myApp.

  • 我正在为我的Spring启动应用程序编写联调,但当我尝试使用@TestProperty tySource覆盖一些属性时,它正在加载上下文xml中定义的属性文件,但不会覆盖注释中定义的属性。