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

XML/XSL et SOAP Discussion :

Lire xml volumineux avec java


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut Lire xml volumineux avec java
    Bonjour tous le monde,
    j'ai essayé d'utiliser l'API JDOM pour lire un fichier xml
    lorsque j'ai utiliser un petit fichier de 7mo , mon programme s'exécute
    mais le problème qu'avec un fichier de taille supérieur (290Mo!) le programme se bloque et il m'affiche l'erreur suivante:
    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
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at java.util.Arrays.copyOfRange(Unknown Source)
    	at java.lang.String.<init>(Unknown Source)
    	at org.jdom.input.TextBuffer.append(TextBuffer.java:105)
    	at org.jdom.input.SAXHandler.characters(SAXHandler.java:738)
    	at org.apache.xerces.parsers.AbstractSAXParser.characters(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:905)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:884)
    	at JDOM2.main(JDOM2.java:21)
    j'ai compris que le JDOM n'a pas assez de mémoire pour générer l'arbre de tout le fichier donc comment je peut augmenter cette taille! ou bien utiliser une partie du disque dur pour l'utiliser par le programme
    merci pour vos aides

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par ARAMYS Voir le message
    j'ai compris que le JDOM n'a pas assez de mémoire pour générer l'arbre de tout le fichier donc comment je peut augmenter cette taille!
    JDOM n'est qu'une bibli Java. Pour augmenter sa mémoire disponible, il suffit d'augmenter la mémoire disponible pour Java.

    Mais bien entendu, il y a une limite à tout ça. Ça devrait passer avec un fichier de 300Mo, mais ça n'ira pas beaucoup plus loin.

    Il vaut mieux éviter de charger les gros fichiers XML en mémoire. Pour ça, il ne faut pas utiliser les DOM, mais SAX ou StAX.
    C'est plus compliqué, mais la réduction d'utilisation mémoire est à ce prix.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Merci pour la réponse rapide
    le problème que j'ai pas des connaissances en SAX ou Stax!
    qu'il est le meilleur parmis ces deux!? un exemple clair pour l'utilisation svp
    est ce que je peut découper mon fichier xml en plusieurs fichiers et utiliser le jdom! (découpage automatique)
    merci à vous

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par ARAMYS Voir le message
    le problème que j'ai pas des connaissances en SAX ou Stax!
    Ben oui, c'est bien plus simple avec JDOM qui s'occupe de tout à notre place, mais quand ça peut pas, ça peut pas.

    Citation Envoyé par ARAMYS Voir le message
    qu'il est le meilleur parmis ces deux!?
    Question de goût.

    - Il est plus difficile de programmer avec SAX, parce qu'il utilise une logique événementielle, et ne le fait pas très bien. Par contre, c'est géré par tout et sans difficulté, il y a des tutoriels tous les 5 mètres.

    - Il est plus facile de programmer avec StAX, parce qu'il a la logique classique. Par contre, personne ne connaît cet extraterrestre, il ne s'intègre pas aussi bien que SAX, on a moins de doc dessus.

    Citation Envoyé par ARAMYS Voir le message
    un exemple clair pour l'utilisation svp
    Dis, hé, tu as Google, oui ?

    Un cours sur SAX et une doc Java officielle pour s'en servir (à partir du Chapitre 5 : Simple API for XML). (Attention, quand on dit "simple," c'est simple pour l'ordinateur, pas pour nous.)

    Un cours sur StAX

    Une rapide description de la différence entre les deux.


    Citation Envoyé par ARAMYS Voir le message
    est ce que je peut découper mon fichier xml en plusieurs fichiers et utiliser le jdom! (découpage automatique)
    Pas automatiquement. L'idée n'est pas spécialement mauvaise, mais JDOM ne va pas le faire à ta place.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Merci pour vos explications
    Pour l'idée de découpage, je veut dire que je dois développer une application qui permet la découpage du fichier xml et par la suite utiliser le jdom sur les petits fichiers.
    mais là j'ai un problème: mon fichier xml volumineu est écrit dans une seule ligne, alors je peut pas le lire ligne par ligne donc j'ai pensé à le lire chaine par chaine mais j'ai pas trouvé comme le faire!
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO_8859-1" ?> <personnes> <etudiant classe="P1"> <nom> Supeérwoman</nom> </etudiant> <etudiant classe="P1"> <nom> Don Corleone</nom> </etudiant> </personnes>
    besoin:
    je veut découper ce fichier, chaque petit fichier contient un seul etudiant

    c un exemple simple juste pour expliquer mon problème, réellement mon fichier xml est plus compliqué

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par ARAMYS Voir le message
    Pour l'idée de découpage, je veut dire que je dois développer une application qui permet la découpage du fichier xml et par la suite utiliser le jdom sur les petits fichiers.
    J'avais compris, mais ça ne peut pas se faire automatiquement sans rien comprendre à SAX ou StAX, non.
    Par contre, après avoir appris à s'en servir, c'est un moyen de profiter des facilités de JDOM sans charger la totalité du fichier en mémoire. Ce n'est pas le seul.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Lire Tag nfc avec java (sur pc)
    Par Cisore dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 16/05/2013, 12h17
  2. Lire un fichier avec Java
    Par sciencesinfo dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/09/2012, 14h53
  3. Lire fichier Excel avec java
    Par roujij dans le forum Documents
    Réponses: 18
    Dernier message: 15/07/2009, 14h46
  4. Comparaison de deux XML Doc avec java
    Par lahiane dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/04/2008, 11h25
  5. [XML]XQuery avec Java
    Par vero59 dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 11/08/2005, 09h36

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