objetos - listas java




Carregando um mapa usando a classe de propriedades (2)

Eu tenho um mapa com 75.000 entradas e cada valor de entrada será de tamanho 10kb em média.

Eu carrego este mapa na memória usando a classe de propriedades. Mas devido ao tamanho do mapa, recebo OutOfMemoryException quando a RAM no host é pequena.

Uma opção que eu tenho é ler as entradas em lotes (como 10.000) na memória em vez de carregar o mapa completo. Leia o próximo 10k depois de processar o 10k inicial.

Existe alguma maneira de conseguir isso usando a classe de propriedades.

Além disso, existe alguma abordagem melhor de carregar as entradas do mapa dessa maneira?

Obrigado e cumprimentos
Sujith


Eu suponho que você não precisa carregar todas as propriedades ao mesmo tempo, mas você precisa interagir com todas as propriedades. Pessoalmente, eu iria com a análise manual do arquivo linha por linha e trabalhando em um fluxo-like. Se houver uma lib para processar uma propriedade muito grande, não sei.


Não use Properties , que é legado

  1. Divida as entradas em vários arquivos

  2. Leia cada arquivo em seqüência, carregue e processe usando Preferences

Exemplo de código:

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();
        }
    }
}

Exemplo de 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>






hashmap