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 :

lire un fichier binaire 8bit apr 8bit


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut lire un fichier binaire 8bit apr 8bit
    hello tlm,
    je debut java,et j'ai un applet qui lire un fichier par ligne
    voici un morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    url = new URL(getCodeBase ());
                 urlConnexion = url.openConnection ();
                 entree = urlConnexion.getInputStream ();
                 fluxEntree = new BufferedReader(new InputStreamReader(entree));
                 string ligne = fluxEntree.readLine ();
    mais enfait mon fichier est en binaire, 8octets (= un double )pour X,8octets pour Y d'un courbe.
    au lieu de fluxEntree.readLine (); je dois mettre quoi à la place??

    je veux remplir un double.
    j'ai pensé à ca, mais je sais pas si ca peut marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    double x=fluxEntree.read ();
    double y=fluxEntree.read ();
    mais read() retourne que un octect je crois.

    merci d'avance

  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
    Le plus simple est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Scanner sc = new Scanner(new URL(getCodeBase()).openConnection().getInputStream());
    double x = sc.nextDouble();
    double y = sc.nextDouble();

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    le fichier est de format suivant:
    256 octets en tet
    et un suite de :
    4 octets id
    4 octets date <-------- utile
    8 octets donnée <---------- utile
    8 octets flat

    je veux recuperer que date et donnée.

    j'ai vu les focntions suivant, mais pas su l'utiliser correctement:


    -int read(byte[] octets)
    lit au plus octets.length
    octets en les plaçant dans le tableau

    - int read(byte[] o,int p,int l) lit au plus l octets en les plaçant dans le tableau à partir de p



    qlq'un pourrait m'expliquer plus claire svp

  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
    Bah tu sais comme je t'ai dit...
    si tu veux récuper la date et la donnée,
    tu fais
    sc.nextInt();
    int date = nextInt();
    long donnee = nextLong();



    Ou alors tu utilises DataInputStream

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    oui c'est vrai, masi c'est pas tres propre je trouve.
    si il y a une maniere de pouvoir lire x byte ou x bit, ca me convient mieux

  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
    Regarde DataInputStream!

  7. #7
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    oui c'est vrai, masi c'est pas tres propre je trouve.
    Ah bon ?

    Sinon pour lire plusieurs octets, tu as toi même trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int read(byte[] octets)
    Tente de lire octets.length byte et les places dans le tableau octets. Retourne le nombre d'octets réellement lu (si par exemple tu tentes de lire 1024 octets mais qu'il y en a que 3 dans le flux, il ne pourra pas en lire 1024).

    bon courage

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par yann2
    Ah bon ?

    Sinon pour lire plusieurs octets, tu as toi même trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int read(byte[] octets)
    Tente de lire octets.length byte et les places dans le tableau octets. Retourne le nombre d'octets réellement lu (si par exemple tu tentes de lire 1024 octets mais qu'il y en a que 3 dans le flux, il ne pourra pas en lire 1024).

    bon courage
    oui je sais que c'est la solution mais j'arrive pas à l'utiliser.
    j'ai essai
    bytes []b;
    fluxEntree.read(b);.. etc
    mais j'ai des erreux.

    pour DataInputStream, c'est idem que la, et j'arrive pas à utiliser int read(byte[] octets) de DataInputStream.

    si qlq'un a un exmemple d'utilisation, ca serai trop top.

  9. #9
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re,

    Si tu donnais plutôt l'erreur stp.

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    ba ca complile pas, le mot read est souligner en raouge car je l'utise mal.
    genre :
    byte []b;
    read(b);

  11. #11
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re,

    Euh...

    Est ce que tu catch bien IOException ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
        in.read(octets);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Attention ne pas oublier d'initialiser b:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte[] b = new byte[NB_BYTES];
    bon courage.

  12. #12
    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
    Excuse-moi, je t'ai dit DataInputStream, en fait je pensais à RandomAccessFile...
    Tu fais un seek(4) pour arriver sur ta première donnée utile, et après tu fais readInt() et readDouble()

  13. #13
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re

    et après tu fais readInt() et readDouble()
    Il me sembe que ce n'est pas un type primitif qu'il veut récupérer. Mais bien des octets. :

    e fichier est de format suivant:
    256 octets en tet
    et un suite de :
    4 octets id
    4 octets date <-------- utile
    8 octets donnée <---------- utile
    8 octets flat
    A moins que... (pas très clair tout ça)

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par yann2
    re,

    Euh...

    Est ce que tu catch bien IOException ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
        in.read(octets);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Attention ne pas oublier d'initialiser b:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte[] b = new byte[NB_BYTES];
    bon courage.
    voici mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        byte b[];
     
    graphique
        public void init ()
        {
         b = new byte[8];
     
            try 
            {
       url = new URL(getCodeBase (),"m11.dat");
       System.out.println("\n url  : "+url);
             urlConnexion = url.openConnection ();
             entree = urlConnexion.getInputStream ();
             fluxEntree = new BufferedReader(new InputStreamReader(entree));
             fluxEntree.read(b);
          System.out.println("\nbuffer  : "+b.toString());
      }
    fluxEntree.read(b); est souligné en rouge

  15. #15
    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 yann2
    Il me sembe que ce n'est pas un type primitif qu'il veut récupérer. Mais bien des octets. :
    D'après ce que j'ai compris, il veut récupérer ces types primitif à partir des octets qui sont dans le fichier...

  16. #16
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re

    Le BufferedReader n'a pas de méthode read(byte[] b) mais une méthode read(char[], int, int). Il faut utiliser un InputStream.
    Tu aurais vu ça dans la doc et pu le résoudre le pb tout seul si tu savais utiliser ton IDE.

    InputStream.read(byte[]) :
    http://java.sun.com/j2se/1.5.0/docs/api/java/io/InputStream.html#read(byte[])

    bon courage

  17. #17
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Points : 52
    Points
    52
    Par défaut
    oki je regard ca.
    merci pour les aides

  18. #18
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    C'est pourtant clair, la classe BufferedReader ne possède pas de methode read(byte[]).
    Dans ton cas je pense que tu devrais utiliser la classe BufferedInputStream (attention elle non plus ne possède pas de methode read(byte[]) tu dois utiliser la methode read(byte[] b, int off, int len) pour lire les données ).
    Lit la doc, tous y est indiqué.

    Attention : byte != bit, un byte est un octet qui vaut à 8 bits, tu doit donc déclarer un tableau de byte de taille 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte []b = new byte[1];
    .

  19. #19
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re

    Dans ton cas je pense que tu devrais utiliser la classe BufferedInputStream (attention elle non plus ne possède pas de methode read(byte[]) tu dois utiliser la methode read(byte[] b, int off, int len) pour lire les données ).
    Euh BufferedInputStream implémente l'interface InputStream et possède une méthdoe read(byte[])

    http://java.sun.com/j2se/1.5.0/docs/api/java/io/FilterInputStream.html#read(byte[])

  20. #20
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    je suis allé un peu vite, désolé, mais c'est bien vu.
    En fait j'utilise tout le temps la methode que j'ai spécifiée du coup j'ai un peu zappé l'autre.
    Merci de m'avoir corrigé

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment bien lire un fichier binaire ?
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 12/01/2007, 08h38
  2. Lire un fichier binaire
    Par vancim dans le forum Pascal
    Réponses: 3
    Dernier message: 20/10/2006, 02h13
  3. comment lire des fichiers binaires
    Par compton dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 06/07/2006, 12h03
  4. [C#] Lire un fichier binaire
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/06/2006, 18h08
  5. [NIO]Lire un fichier binaire
    Par Info-Rital dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 25/07/2005, 07h50

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