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 :

Ouvrir Fichier >1G


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 56
    Par défaut Ouvrir Fichier >1G
    Bonjour,

    Je travaille sur un petit programme permetant de parser un dump de mySql vers pSQl (le script trouvable via les liens sur ce site ne fonctionne pas). Le code ne pose pas de problème en lui même, c'est plutot la taille du dump qui pose problème (>1G). Pour le parsing, j'utilise des regexp et il me faut, du coup, charger l'entiereté du dump en mémoire pour pouvoir ensuite le parser .

    Quel'quun aurait-il une idée de comment charger se fichier en évitant un outOfMemory ? J'ai déjà essayé d'augmenter la taille allouée à la heapSpace sans succès. Ci dessous, le code qui charge le fichier (rien d'exceptionnel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    			InputStream in = new FileInputStream(fileName);
    			InputStreamReader inReader =new InputStreamReader(in);
    	        BufferedReader br =new BufferedReader(inReader);
     
    	        //read the file 
    	        StringBuffer buf = new StringBuffer();
    	        String lecture = null;
    	        while (((lecture=br.readLine())!=null)) {
    	        	buf.append(lecture);
    	        }
    	        br.close();
    	        inReader.close();
    	        in.close();
    	        return buf;

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Déjà le code n'est pas super pour 2 raisons :
    • Pour récupérer la totalité du fichier il serait préférable de faire une lecture par bloc plutôt que par ligne...
    • Il manque un try/finally pour la fermeture du fichier


    Ensuite ton problème de mémoire est normale, puisque le fichier fait plus de 1Go, et sachant qu'un char est codé sur 2 octets en Java cela représente plus de 2Go de mémoire... et il me semble que les JVM Windows ne peuvent pas allouer autant de mémoire !



    Que fait ton parsing exactement ? Ne pourrais-tu pas l'appliquer sur de petites portions de ton fichier ? (une ligne ? une bloc bien limité ?)


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 56
    Par défaut
    Je n'ai pas mis le try catch mais il est bien présent dans le code, j'ai juste mis l'essentiel.

    Sinon, je ne peux malheureusement me contenter d'une ligne, ni même d'un bloc bien délimité. En gros, le fichier se compose d'instructions ddl (drop table, create table, etc ...) sur un nombre de ligne indéterminés, suivit d'un bloc insert into tblname values (...),(...)...,(...); dont la taille est également fonction de la quantité de données contenue dans la table, ce qui est donc également variable

    Enfin tant pis, en utilisant pas des regexp je devrais pouvoir lire le fichier ligne par ligne et traiter les différents blocs au fur et à mesure qu'il se complète, sans devoir gfarder l'ensemble du document en mémoire. Ce sera moins joli mais bon ...

Discussions similaires

  1. [VB.NET] Ouvrir fichier dans appli par double-clic dessus
    Par vynce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2005, 16h43
  2. [FB 1.5] ouvrir fichier texte dans une ps
    Par jlf dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2005, 20h29
  3. [Système] Ouvrir fichier externe avec prog par défaut de l'OS
    Par Pill_S dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 30/05/2004, 11h54
  4. [VB6] ouvrir fichier sur glisser déplacer
    Par bhaal76 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/04/2003, 17h04
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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