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 :

Parcours de fichier binaire


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Parcours de fichier binaire
    Bonjour à tous,

    je viens du monde du C/C++ et quand je veux gérer des données dans un fichier binaire, je prends une bonne vieille structure dans laquelle je mets mes champs fixes et zou, j'écris ça dans un fichier. Du coup après fastoche, je saute de structure en structure et je peux parcourir mes données.
    Maintenant je cherche à faire la même chose en Java. J'ai trouvé la classe RandomAccessFile qui me permet de me balader dans le fichier et de lire des données de base, mais avec les chaines de caractères c'est autre chose. Je suis obligé d'utiliser String.format pour pouvoir écrire des chaines de taille fixe.

    Bref, j'aimerais bien que ce soit aussi rapide qu'en C/C++ mais là je trouve ça un peu galère. Vous connaissez un autre moyen ?

    Merci d'avance.

    Kalkul

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Tu peux utiliser la Sérialisation pour stocker des données un peu complexes. La sérialisation te permet, basiquement, d'écrire dans un flux un objet Java, ce se rapproche donc de ce que tu faisais en C/C++, si j'ai bien compris ton post.

    Je te conseille de lire le tuto jmdoudou sur la sérialisation.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Salut Olivier,

    merci pour ta réponse.
    Oui j'ai entendu parlé de la sérialisation, et j'y ai bien pensé dans un premier temps. Mais si j'ai 300 Mo de données ça va faire lourd à chaque chargement... Mais du coup je me dis que je ne suis pas allé voir si la sérialisation me permettait ça... Parce que je connais le principe de base de la sérialisation qui est de rendre persistent un objet, ce qui n'est pas exactement ce que je veux au départ. Bon aller je vais aller gratter un peu ça... Mais si vous avez encore des idées sur le sujet je suis preneur.

    Kalkul

  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
    Citation Envoyé par KalKul Voir le message
    Parce que je connais le principe de base de la sérialisation qui est de rendre persistent un objet, ce qui n'est pas exactement ce que je veux au départ.
    Mettre une structure C/C++ dans un fichier est tout aussi "rendre un objet persistant" que l'est la sérialisation Java.

    La différence c'est plutôt qu'on ne peut pas prédire la taille sérialisée d'un objet Java, contrairement à une structure C/C++. Si le fichier contient vraiment beaucoup de données et qu'on ne peut pas se permettre de le charger en entier, ça devient donc plus compliqué : on se retrouve à programmer une mini-base de données, et à ce moment-là autant prendre une vraie mini-base de données, elles sont là pour ça.
    Sinon, reste effectivement la solution de lire et écrire soi-même les octets dans le fichier au lieu de compter sur un mécanisme du langage pour faire ça.

    Bon, dans tous les cas Java n'est pas très bon pour stocker une grande quantité de données sous forme binaire tout en restant simple. Il encourage plutôt à travailler la solution de l'état de l'art, une base de données (et éventuellement.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Tu as exactement compris mon problème thelvin !
    Je n'ai pas été assez précis dans mon premier message mais c'est bien mon problème. En C/C++ je connais exactement la taille de ma structure et je peux donc parcourir mon fichier binaire pas saut de taille fixe. Il est alors facile de se placer au bon endroit en mettant ses données à jour sans avoir peur d'écraser d'autres données et sans avoir à déplacer toutes les autres données pour faire de la "place" (pour peu que les champs de ma structure ait la bonne taille dés le départ).
    Avec la sérialisation je suis plus limité dans mes manipulations. Sérialiser plusieurs objets ne pose pas de problème mais s'ils ne sont pas de taille fixe alors il m'est impossible de mettre à jour un objet dans un fichier où il y en aurait plusieurs. De toute façon java ne propose rien de se côté là.
    Finalement tu réponds à ma question dans le sens où je me disais qu'il ne servait à rien de chercher à gérer ce genre de fichier puisque dans ce cas on utiliserait aujourd'hui plutôt une base de données (et notamment dans ce cas une mini-base de données). Bref, j'ai rejoins ta conclusion avant que tu ne me la donnes mais je suis ravi que tu l'aies fait. J'arrête mes recherches là sur ce point.

    Thanks a lot.

    Kalkul

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

Discussions similaires

  1. Lecture et parcours de fichiers binaires
    Par john_osaka dans le forum C++
    Réponses: 1
    Dernier message: 07/03/2006, 20h58
  2. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  3. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 22h57
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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