Garder une structure de donnée en mémoire
Fermé
liacad
Messages postés
2
Date d'inscription
mardi 16 juillet 2013
Statut
Membre
Dernière intervention
17 juillet 2013
-
16 juil. 2013 à 10:51
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 17 juil. 2013 à 20:57
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 17 juil. 2013 à 20:57
A voir également:
- Garder une structure de donnée en mémoire
- Mémoire virtuelle - Guide
- Logiciel de recuperation de donnée - Guide
- En informatique, les informations sont codées par des 0 et des 1, appelés bits. un bit correspond à un espace mémoire. parmi les séquences ci-dessous, lesquelles occupent le moins d'espace en mémoire ? - Forum Programmation
- Cette application va à présent redémarrer pour libérer une quantité de mémoire supplémentaire ✓ - Forum TNT / Satellite / Réception
- Nettoyer mémoire ipad - Guide
3 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
16 juil. 2013 à 19:14
16 juil. 2013 à 19:14
La sérialisation proposé par Flog78 peut être une idée, cependant il faut bien comprendre qu'il sera quand même nécessaire de charger un fichier en mémoire et que cela prendra quand même du temps, mais probablement moins que tout reconstruire à chaque fois.
Voici un exemple complet, tu devras bien sûr modifier la méthode construire() qui créé la map la première fois, ainsi que le chemin d'accès au fichier :
Voici un exemple complet, tu devras bien sûr modifier la méthode construire() qui créé la map la première fois, ainsi que le chemin d'accès au fichier :
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.TreeMap; public class Dictionnaire { public static final String DICO_FILEPATH = "C:/dico.ser"; private static Map<String, List<String>> dico = null; public static Map<String, List<String>> getDictionnaire() { if (dico == null) dico = deserialiser(); if (dico == null) { dico = construire(); serialiser(); } return dico; } private static Map<String, List<String>> construire() // TODO { Map<String, List<String>> map = new TreeMap<String, List<String>>(); map.put("a",Arrays.asList("a","à","â","ä")); map.put("e",Arrays.asList("e","è","ê","ë")); return map; } private static void serialiser() { try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(DICO_FILEPATH)); oos.writeObject(dico); oos.close(); } catch (Exception e) { } } @SuppressWarnings("unchecked") private static Map<String, List<String>> deserialiser() { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(DICO_FILEPATH)); dico = (Map<String, List<String>>) ois.readObject(); ois.close(); return dico; } catch (Exception e) { return null; } } public static void main(String[] args) { System.out.println(Dictionnaire.getDictionnaire()); } }
Lorsque tu a chargé ton fichier dans ta structure, il suffit ensuite de sérialiser ta structure pour ne pas avoir à la recharger :
Tutorial sérialisation :
http://java.developpez.com/faq/java/?page=langage_notions#NOTION_serialisation
Tutorial sérialisation :
http://java.developpez.com/faq/java/?page=langage_notions#NOTION_serialisation
liacad
Messages postés
2
Date d'inscription
mardi 16 juillet 2013
Statut
Membre
Dernière intervention
17 juillet 2013
17 juil. 2013 à 11:58
17 juil. 2013 à 11:58
Merci beaucoup à vous deux,
J'ai pris le code de KX, en modifiant ce qu'il faut modifier (enfin j'espère...)
J'aurai cependant deux autres questions:
1- Dans getDictionnaire() pourquoi tester deux fois si dico est null? pour ne pas avoir à le recréer si il existe déjà?
2- La map a bien été complétée comme je le voulais et le .ser a bien été créé, maintenant pour utiliser la ma dans une autre classe je fais comment?
Je sais que c'est trop demandé mais je suis vraiment prise par le temps :s
Merci encore
J'ai pris le code de KX, en modifiant ce qu'il faut modifier (enfin j'espère...)
J'aurai cependant deux autres questions:
1- Dans getDictionnaire() pourquoi tester deux fois si dico est null? pour ne pas avoir à le recréer si il existe déjà?
2- La map a bien été complétée comme je le voulais et le .ser a bien été créé, maintenant pour utiliser la ma dans une autre classe je fais comment?
Je sais que c'est trop demandé mais je suis vraiment prise par le temps :s
Merci encore
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
17 juil. 2013 à 20:57
17 juil. 2013 à 20:57
1) Le premier null sert à tester si on a déjà chargé le dictionnaire en mémoire, s'il y est déjà on a juste à le retourner sinon il faut le désérialiser. Cependant, on ne peux désérialiser le dictionnaire que si celui-ci a déjà été sérialisé, si c'est la première fois qu'on lance l'application la sérialisation va renvoyer null, on fait donc le deuxième test à null pour savoir si la sérialisation a permis d'obtenir le dictionnaire ou pas, et en dernier recours on va recréer complétement le dictionnaire et le sérialiser, mais normalement cela devrait se produire qu'une seule fois, lors de la première utilisation de l'application.
2) Tu utilises la map dans une autre classe en faisant un Dictionnaire.getDictionnaire() comme je l'ai fait dans la méthode main. De toute façon c'est la seule méthode public de la classe, tu ne peux rien faire d'autre que cette méthode depuis une autre classe.
2) Tu utilises la map dans une autre classe en faisant un Dictionnaire.getDictionnaire() comme je l'ai fait dans la méthode main. De toute façon c'est la seule méthode public de la classe, tu ne peux rien faire d'autre que cette méthode depuis une autre classe.
16 juil. 2013 à 19:25
Il n'y a que quelques lignes à modifier, c'est très simple :