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

Entrée/Sortie Java Discussion :

Lire un très gros fichier, quoi utiliser ?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut Lire un très gros fichier, quoi utiliser ?
    Bonjour,

    Voila, je dois lire un gros, très gros fichier XML de l'ordre de 18 / 20 Mo.

    Et donc j'aimerais savoir le meilleur moyen de lire le fichier pour gagner en perfs ?

    Pour l'instant, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Source
    InputSource in = new InputSource(new FileInputStream(path));
     
    // Definition du parser ORACLE
    SAXParser parser = new SAXParser();
    parser.setContentHandler(new DemoContentHandler());
    parser.setValidationMode(SAXParser.NONVALIDATING);
     
    // Lancement du parser
    parser.parse(in);
    Donc j'utilise FileInputStream. FileReader serait-il plus performant ? Ou autre chose encore ?

    Pourquoi j"utilise Inputsource après ? Et bien parce que c'est la seule chose qu'à bien accepter le parser SAX d'Oracle.

    Si quelqu'un en sait un peu plus sur l'optimisation de code via java ? Pour la lecture de fichier notamment.

    Merci
    ++

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Une optimisation : utiliser un BufferedReader au lieu d'un FileInputStream.

  3. #3
    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 : 45
    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
    jouer sur le type de reader ne fera pas grande différence. Le plus important c'est ce qui se passe lors des évènement SAX. Si tu construit un arbre DOM en mémoire pour un xml de cette taille, c'est çà qui va bouffer. Tu fait quoi dans ton contenthandler?

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    jouer sur le type de reader ne fera pas grande différence. Le plus important c'est ce qui se passe lors des évènement SAX. Si tu construit un arbre DOM en mémoire pour un xml de cette taille, c'est çà qui va bouffer. Tu fait quoi dans ton contenthandler?
    Je ne crée par d'arbre DOM étant donné que je n'utilise pas cet API mais l'API SAX. (j'avais fait des tests avec DOM, et la différence avec SAX est flagrante pour de très gros fichier donc maintenant que je suis bien avec SAX, j'essaie d'optimiser encore le reste, s'il y a des choses à optimiser).

    Donc dans mon contenthandler, il y a le déclenchement des évenements (début/fin balise, PCDATA, etc quoi, les choses de base de l'API SAX) et les traitements derrières c'est que toutes les infos je les mets dans la BD Oracle. Donc, oui pas mal de requêtes derrière qui vont suivre si c'était ca ta question pour savoir ce qui allait être fait avec les données du fichier XML ?

    Citation Envoyé par darkxan
    Une optimisation : utiliser un BufferedReader au lieu d'un FileInputStream.
    Comment utiliser BufferedReader ?
    J'ai trouvé des exemples qui passe forcément avant par un FileReader ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fileReader = new FileReader(nomFichier);
    bufferedReader = new BufferedReader(fileReader);
    C'est la façon correcte de faire ?

    Merci
    Bonne soirée

  5. #5
    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 : 45
    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
    le bufferedreader va lire par bloc, mais je suis pas convaincu du gain. Par contre, si t'as pas mal de requete oracle, tu peux peut etre les regrouper pour en faire des batch et limiter tes latences réseau. Genre t'accumule une 50 aine d'ordres à envoyer à la db et tu balance tout d'un coup. (méthode addBatch() sur le statement.

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/05/2012, 14h22
  2. Lire un très gros fichier chez 1&1
    Par ziteak dans le forum Langage
    Réponses: 0
    Dernier message: 27/06/2011, 18h52
  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