Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/12/2012, 22h58   #1
KalKul
Invité régulier
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 31
Points : 9
Points : 9
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
KalKul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 11h05   #2
olivier.pitton
Membre éprouvé
 
Avatar de olivier.pitton
 
Homme olivier pitton
Étudiant
Inscription : juin 2012
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme olivier pitton
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2012
Messages : 210
Points : 439
Points : 439
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.
olivier.pitton est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 02/01/2013, 21h58   #3
KalKul
Invité régulier
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 31
Points : 9
Points : 9
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
KalKul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 22h52   #4
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 113
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 113
Points : 10 349
Points : 10 349
Envoyer un message via Skype™ à thelvin
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.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 23h56   #5
KalKul
Invité régulier
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 31
Points : 9
Points : 9
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
KalKul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h38.


 
 
 
 
Partenaires

Hébergement Web