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

Entrée/Sortie Java Discussion :

écriture fichier binaire


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 118
    Points : 82
    Points
    82
    Par défaut écriture fichier binaire
    Bonjour,

    J'aimerais savoir comment java encode les int (méthode writeInt) et les string (méthode writeUTF) dans un fichier binaire.

    En particulier, pour les int, j'aimerais connaitre la taille (je pense 4 octets) et l'endianness.
    Et pour les string, savoir si il code la taille de la chaine de caractère en début et la taille d'un caractère (2 octets je pense)

    En effet, je souhaite lire dans un programme C++ un fichier binaire qui a été écrit en java. Ce fichier est du type :

    3
    2 bonjour salut
    1 ciao
    3 toto tata titi

    soit INT INT STRING...STRING INT STRING...STRING ...

    Merci d'avance,

    Alex.

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        DataOutputStream das = new DataOutputStream(new FileOutputStream("test.bin"));
            das.writeInt(5);
            das.writeUTF("salut");
            das.writeInt(6);
            das.close();
    Résultat en hexa dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00 00 00 05 00 05 73 61 6C 75 74 00 00 00 06
    INT : 4 octets big endian
    String (UTF): 2 octets pour la taille, suivi de la String.


    Sinon pour avoir le format que tu veux, utilise write(byte[])...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 118
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par ®om
    Résultat en hexa dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00 00 00 05 00 05 73 61 6C 75 74 00 00 00 06
    INT : 4 octets big endian
    String (UTF): 4 octets pour la taille, suivi de la String.


    Sinon pour avoir le format que tu veux, utilise write(byte[])...
    Salut, merci pour ta réponse. Mais ne crois tu pas que la taille de la chaine de caractères est codée uniquement sur 2 octets (00 05) et ensuite 1 octet par caractère (ce qui me parait louche car je pensai que les caractères étaient codés sur 2 octets...) soit "73" pour le "s" 61 pour le "a"...

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par alex'l
    Salut, merci pour ta réponse. Mais ne crois tu pas que la taille de la chaine de caractères est codée uniquement sur 2 octets (00 05) et ensuite 1 octet par caractère (ce qui me parait louche car je pensai que les caractères étaient codés sur 2 octets...) soit "73" pour le "s" 61 pour le "a"...
    Oui pardon la taille est sur 2 octets (j'ai corrigé sur le précédent post).

    Pour la taille de chaque caractère, en fait c'est "taille variable" selon la norme utf(-8 je suppose). La taille est donnée par les premiers bits:
    0xxxxxxx : 1 octet
    110xxxxx 10xxxxxx : 2 octets
    1110xxxx 10xxxxxx 10xxxxxx : 3 octets
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx : 4 octets

    a priori, je dirais que char donne un utf jusqu'à 3 octets (qui contient 2 octets utiles), et ne donne jamais 4 octets...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 118
    Points : 82
    Points
    82
    Par défaut
    ok, merci à toi ®om.
    Mon problème est résolu. J'ai laissé tel quel le programme java.
    Pour le lire en C, c'était par contre un peu galère car obligé de lire octets par octets et de les inverser pour lire les "int" qui sont sur plusieurs octets.

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par alex'l
    ok, merci à toi ®om.
    Mon problème est résolu. J'ai laissé tel quel le programme java.
    Pour le lire en C, c'était par contre un peu galère car obligé de lire octets par octets et de les inverser pour lire les "int" qui sont sur plusieurs octets.
    Ah parce que tu es sur un processeur intel en big endian?

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

Discussions similaires

  1. [Débutant] Problème d'écriture dans un fichier binaire.
    Par katmai dans le forum C#
    Réponses: 1
    Dernier message: 10/07/2011, 20h39
  2. Lecture/écriture fichier binaire via structure
    Par Tenebrous dans le forum C
    Réponses: 9
    Dernier message: 07/03/2010, 00h02
  3. Problème d'écriture vers fichier binaire
    Par Mr Light dans le forum C++
    Réponses: 6
    Dernier message: 27/02/2008, 21h25
  4. Écriture fichier binaire
    Par Marneus dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/09/2007, 23h59
  5. [VS2005]lecture/écriture dans fichier binaire
    Par shadowmoon dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/09/2007, 17h30

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