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

Langage Java Discussion :

Splitter un fichier en blocs


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut Splitter un fichier en blocs
    Bonjour,

    Je cherche à spliter un fichier en batchs, mais j'ai besoin de parcourir chaque batch plusieurs fois. Je cherche donc à avoir un Iterator<Iterable<Row>>, ou Row représente une ligne du fichier.

    Si j'utilise Iterables.paritition() de Guava, je recois un Iterable<List<Row>>. Ca répond à mon problème pour des petits batchs, mais chaque batch est copié en mémoire dans une liste. Je voudrais éviter cette copie mémoire.

    J'imagine une solution avec des outils bas niveaux sur le fichier, de type fseek et frewind : quand on appelle iterator() sur l'Iterable<Row> représentant un batch, je reviens sur la ligne de début du batch.

    - Connaissez-vous une solution toute faite ?
    - Existe-t'il des FileReader qui puissent revenir à une ligne antérieure ?
    - Quelles fonction bas niveaux de lecture de fichier existent en Java ?

    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Regarde RandomAccessFile
    Tu fais un premier passage pour mémorisé tous les offsets de début de ligne. Il ne te reste plus qu'à faire un seek() sur les offsets que tu viens de récupérer. Le premier passage risque d'être une peu long en cas de gros fichier, mais au moins tu ne sature pas la mémoire avec l'ensemble du contenu du fichier.

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci Iohack, c'est exactement ce que je cherchais !

    Même pas besoin de faire un premier passage complet explicitement, l'itérateur externe s'en charge.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    J'ose espérer que tu n'as pas de contraintes trop compliquées concernant l'encodage des fins de ligne et du texte, par contre -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par thelvin Voir le message
    J'ose espérer que tu n'as pas de contraintes trop compliquées concernant l'encodage des fins de ligne et du texte, par contre -_-°.
    Genre UTF-8 :-)

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Oui, j'ai vu la limitation dans la doc de RandomAccessFile.
    J'espère moi aussi ^^

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    UTF-8 ça va encore, mais si on doit aussi gérer des trucs genre UTF-16 ou Shift-JIS ça va être compliqué. Reconnaître les octets correspondants aux sauts de lignes, qui dépendant d'ailleurs si c'est CR, LF, CRLF ou n'importe lequel.
    Alors qu'un simple Files.newBufferedReader() s'occupe de tout tranquille.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture dans un fichier par bloc
    Par danathane dans le forum Langage
    Réponses: 1
    Dernier message: 15/12/2008, 11h02
  2. lecture ecriture de fichier par blocs
    Par pfeuh dans le forum C
    Réponses: 10
    Dernier message: 06/11/2008, 10h48
  3. Lire un fichier par bloc de n*m bytes
    Par chaka_zulu dans le forum Langage
    Réponses: 1
    Dernier message: 24/05/2007, 07h26
  4. Lecture de fichier par blocs
    Par nicolas66 dans le forum C++
    Réponses: 12
    Dernier message: 11/11/2006, 20h36
  5. Algo de Découpe de Fichiers en Blocs
    Par Niouts dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 14/11/2005, 17h01

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