Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 31
    Points : 10
    Points
    10

    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
    Expert Confirmé
    Avatar de olivier.pitton
    Homme Profil pro olivier pitton
    Développeur Java
    Inscrit en
    juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Nom : Homme olivier pitton
    Âge : 26
    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 844
    Points
    2 844

    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 ce tuto sur la sérialisation.

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 31
    Points : 10
    Points
    10

    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

    Inscrit en
    septembre 2004
    Messages
    9 741
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 741
    Points : 16 097
    Points
    16 097

    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.)
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
    Partagez vos connaissances, mais aussi comment s'en servir.

  5. #5
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 31
    Points : 10
    Points
    10

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •