IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Stocker un objet conséquent


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut Stocker un objet conséquent
    Bonjour,

    J'ai un petit ceci pour stocker un objet :

    J'essaye de faire un algo mais j'ai un problème pour stocker un objet :

    J'initialise une arrayList qui va contenir mon code de fin.

    Au début, je dois parcourir un fichier (n'importe quel fichier), puis stocker tout les caractère qui apparaisse dans ce fichier.

    J'ai stocker ces caractères dans une hashSet d'integer (j'ai caster le caractère en entier).

    Ensuite, je dois re parcourir mon fichier et cette fois à chaque fois que je lis un caractère de mon fichier je dois récupérer l'indice de ce caractère dans ma hashSet (on s'en fiche comment je la récupère).

    (C'est cette partie qui ne marche pas)
    -->
    Et cette indice, je l'ajoute à mon arrayList de départ, le problème c'est que pour les petit fichier, ça marche car il n'y à pas beaucoup d'élement à ajouter mais quand je test juste avec un film de 180mo, j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    LinkedList<Integer> linkedList = new LinkedList<Integer>(dictonnary);
     
    for (int i = 0; i < mappedByteBuffer.limit(); i++) {
    	int caracter = (int) mappedByteBuffer.get();
    	encoding.add(linkedList.indexOf(caracter));
    }
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at java.util.Arrays.copyOf(Unknown Source)
    	at java.util.Arrays.copyOf(Unknown Source)
    	at java.util.ArrayList.grow(Unknown Source)
    	at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
    	at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    	at java.util.ArrayList.add(Unknown Source)
    	at mz78.MTF.swapAndShift(MTF.java:86)
    	at mz78.MTF.encoding(MTF.java:26)
    	at mz78.Main.main(Main.java:16)
    <--

    Que dois-je faire pour résoudre ce problème, je ne veux pas changer la taille de la jvm car si je test avec un film de 30go je ne pense pas que ça passera ^^.

    On m'a conseillé d'utiliser la sérialisation mais je n'arrive pas à faire une sérialisation avec une boucle.

    Merci.

  2. #2
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Pourquoi ne pas stocker uniquement les caractères, au moment de la lecture du fichier ? Tu lis, tu teste si c'est un caractère, si oui tu le stocke dans la structure que tu veux. Par exemple un autre fichier... Comme ça t'es sûr d'avoir assez de place, en principe, sauf si ton HD est trop plein, ce que tu peux tester avant de commencer...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Merci pour réponse tout d'abord.

    Je ne peux pas faire ça, parce que je ne l'ai pas expliquer mais je fais un traitement sur mon arrayList de départ (distonnary) quand je recherche le caractère que j'ai lu, je récupère son indice, je supprime l’élément et je le passe en tête de liste ^^. Je ne peux pas faire le traitement en même mais ce n'est pas le soucis.

    Par contre j'ai essayé de stocker ça dans un fichier mais le problème c'est que c'est super long ...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    D'abord ta strutcture est mauvaise. Tu stocke tous les caractères, alors que ce qui t'intéresse, c'est le premier que tu trouve avec indexOf => t'as juste besoin d'une structure à 256 entrée qui stocke l'indice du premier caractère de chaque type. Tous les autres sont inutiles. Ensuite convertir le char en integer n'a pas de sens. Enfin, une vidéo, ce ne sont pas des caractères là dedans, donc je comprend pas trop le but de la manoeuvre....


    Enfin, encoding gagnerais à être transformée en un int[] plutôt que de bouffer plein de place en tant que List<Integer>

    Enfin, comme mentionné, il serait probablement préférable de revoir l'algo pour qu'il n'aie pas besoin de tout ce stockage, mais qu'il traite les données en flux continu.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Merci, ça m'intéresse,

    Est-ce que tu pourrais me donner un exemple de ce que tu dit ?

    Au départ c'est ce que j'avais fait un tableau[255] et j'ajoutais un caractère dans ce tableau en fonction de son code ascii du coup mon tableau était triée et il n'y avait pas de doublon, sauf que dans un fichier vidéo j'ai trouvé un caractère avec un code ascii de 65500 et quelque...

    Qu'est ce que tu entend par 1er caractère de chaque type ?

    je te fais un exemple simple de l'algo si tu veux pour bien qu'on ce comprenne qu'il n'y ai pas d'ambiguité. (Avec ce que je fais actuellement).

    fichier "test.txt" contient "baaabacabacab"

    Je récupère mon dictionnaire donc je parcours mon fichier et je récupère chaque caractère.
    J'obtient : [a, b, c]

    Ensuite je re parcours mon fichier :

    Je lis un b
    donc je récupère l'indice de b dans dictionnary (1 que j'ajoute a ma structure), je le supprimer [a, c], et je le passe en tête [b, a, c].

    Je lis un a
    donc je récupère l'indice de a dans dictionnary (1 que j'ajoute a ma structure), je le supprimer [b, c], et je le passe en tête [a, b, c].

    ... Jusqu’à la fin du fichier

    A la fin j'obtient :
    [1, 1, 0, 0, 1, 1, 2, 1, 2, 1, 2, 1, 2].

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par jeyGey Voir le message
    sauf que dans un fichier vidéo j'ai trouvé un caractère avec un code ascii de 65500 et quelque...
    Un fichier vidéo c'est du binaire, pas des caractères. T'essaie de faire quoi au juste?

    Citation Envoyé par jeyGey Voir le message
    Qu'est ce que tu entend par 1er caractère de chaque type ?
    Ben l'index de la première rencontre, puisque visible c'est tout ce qu'utilise ta boucle. Quoi que vu ton exemple, tu n'utilise carrément que sa seul présence, ce qui est encore plus basique.



    Citation Envoyé par jeyGey Voir le message
    je te fais un exemple simple de l'algo si tu veux pour bien qu'on ce comprenne qu'il n'y ai pas d'ambiguité. (Avec ce que je fais actuellement).
    Je ne vois toujours pas le but de l'algo (juste ce qu'il sort), mais soit. Tu peux très bien réaliser ça avec un tableau de taille 255 comme tu l'a fait avant. Quand aux nombres que tu génère en parcourant le deuxième fichier, tu peux très bien les utiliser directement plutot que les stocker en mémoire (mais bon, j'ai pas la moindre idée de ce à quoi tu les utilise)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Ok merci, je refaire la lecture et je te tiens au courant.
    Le code de fin je m'en sert dans une autre méthode et je ne peux pas le faire au fur et a mesure il me faut absolument le code de fin.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    En faite, sa ne m'aide pas du tout.
    Car ce que tu m'explique je l'ai deja fait (j'ai en revanche bien modifier mon code, j'ai fait un tableau de 255 case pour stocker les caractères que je trouve) mais je n'arrive pas a stocker tout les 200 000 millions de int (ou plus) que je dois stocker.

Discussions similaires

  1. [JTree] comment y stocker les objets ?
    Par calogerogigante dans le forum Débuter
    Réponses: 12
    Dernier message: 16/08/2008, 20h39
  2. Stocker un objet dans la session
    Par Matth_S dans le forum ASP
    Réponses: 9
    Dernier message: 20/09/2006, 11h34
  3. [Jtable] Stocker un objet
    Par nico_somb dans le forum Composants
    Réponses: 14
    Dernier message: 19/07/2006, 20h44
  4. Peut-on stocker un objet quelconque dans vector
    Par chrono23 dans le forum SL & STL
    Réponses: 30
    Dernier message: 18/06/2006, 12h54
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo