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

Format d'échange (XML, JSON...) Java Discussion :

Enregistrement de fichier très gros


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut Enregistrement de fichier très gros
    Bonjour,

    Je voudrais enregistrer un fichier XML avec JDom de plus de 600.000 lignes. Mais lors de l'enregistrement, mon programme se bloque. Voici la méthode que j'utilise pour enregistrer mon fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void serialisationXML(Document doc) throws FileNotFoundException, IOException{
    		XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
    		out.output(doc, new FileOutputStream("xml output.xml"));		
    	}
    Je pense que c'est un problème de mémoire car tout marche très bien des que je prends un fichier moins conséquent.

    Avez vous une solution?

    Merci d'avance

  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
    J'en doute. Un programme ne "se bloque" que quand il y a deadlock ou boucle infinie, ce qui a peu de chances d'arriver par la faute de JDOM ou de son écriture sur disque.

    À mon avis, ton programme ne se bloque pas, il plante et affiche une exception. Il faut nous montrer laquelle. Ce pourrait être une erreur d'IO, et éventuellement un dépassement de mémoire, mais pour 600.000 lignes j'en doute.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Je pense avoir trouver la bloucle infine. Elle est dans la méthode printContentRange de la classe XMLOutputter. Est ce que ça peut etre un bug sur l'API JDom?

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Si tu as pas une exception StackOverflow, il y a peu de chances. Essaie déjà avec un fichier un peu plus petit.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Je n'ai pas d'exception. Je pense etre bloqué dans une boucle infini.

    @_skip:
    Lorsque j'essaye avec un petit fichier, tout marche très bien.

  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
    Marrant. Tu as peut-être vraiment trouvé un bug de JDOM. Il y a aucun moyen de nous filer la même chose pour qu'on voit si on a le problème ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    En essayant de vous creer la meme chose, j'ai réussi à lever une exception. Comme je m'y attendais, j'ai un OutOfMemoryError. Par contre je ne comprends pas pourquoi je n'ai pas cette application dans mon programme.

    Edit: J'ai augmenté la taille de la JVM et tout marche bien. Je n'ai donc pas trouvé de bug dans JDom

  8. #8
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Quand on manipule d'aussi grosse quantité de données, il peut être intéressant de considérer des streaming API plutôt que du DOM? Parce qu'augmenter la taille mémoire à 128m, ça va marcher jusqu'au jour où il te faudra 129.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Citation Envoyé par _skip Voir le message
    Quand on manipule d'aussi grosse quantité de données, il peut être intéressant de considérer des streaming API plutôt que du DOM? Parce qu'augmenter la taille mémoire à 128m, ça va marcher jusqu'au jour où il te faudra 129.
    C'est pas 128m qu'il me faut mais 500m

  10. #10
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Citation Envoyé par tupac25 Voir le message
    C'est pas 128m qu'il me faut mais 500m
    .. Lis entre les lignes , si c'est pas 129 ce sera 501 ou 513. Le mieux serait peut être que tu prévois ça autrement, enfin c'est toi qui sait

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Le fait d'utiliser une streaming API ne va t il pas ralentir mon programme? Et qu'elles sont les avantages et les inconvénients de ces API?

  12. #12
    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 tupac25 Voir le message
    Le fait d'utiliser une streaming API ne va t il pas ralentir mon programme?
    Non, sauf en circonstances complexes, c'est le contraire.
    La plupart du temps elles sont bien plus rapides, et elles occupent toujours beaucoup moins de mémoire.

    Citation Envoyé par tupac25 Voir le message
    Et qu'elles sont les avantages et les inconvénients de ces API?
    Avantages :
    - Elles ne chargent pas les données en mémoire. Elles lisent et écrivent les fichiers à la volée.
    - Donc la mémoire ne contient que ce qui nous intéresse, pas le Document entier. Et en fait, si on lit et écrit en même temps, la mémoire n'est utilisée que temporairement.
    - On lit, traite et écrit en même temps. Ça évite de faire trois étape charger en mémoire / traiter / sérialiser la mémoire. Plus rapide.

    Inconvénients :
    - Elles ne chargent pas les données en mémoire. Elles lisent et écrivent les fichiers à la volée.
    - On n'a pas à sa disposition le document entièrement chargé, il faut réagir en ligne à des événements de lecture, ou générer en ligne des événements d'écriture. C'est plus compliqué et bien moins souple.
    - Le XPath n'est donc pas possible, et on ne peut pas faire de transformation XSLT comme ça, par exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    C'est bien ce qu'il me faut

    Laquelle vous me conseillé? (s'il y en a plusieurs)

    En attendant je vais faire un tour vers StAX.

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/05/2012, 14h22
  2. [CSV] Traitement d'un très gros fichier XML ou CSV
    Par Paulux1 dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2008, 16h05
  3. [SimpleXML] Analyser un très gros fichier XML
    Par Paulux1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/02/2008, 02h53
  4. Ouvrir un très gros fichier XML
    Par strat0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 02/11/2007, 13h29
  5. Transformer un très gros fichier XML avec XSL
    Par wozzz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 10h57

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