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 :

Ecriture d'un seul bit dans un fichier


Sujet :

Entrée/Sortie Java

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 106
    Points : 78
    Points
    78
    Par défaut Ecriture d'un seul bit dans un fichier
    Bonjour,

    Actuellement en train de développer un logiciel de compression sous JAVA, notamment pour la portabilité, j'ai rencontré un problème que je n'ai pas su resoudre tout seul, c'est pourquoi je demande vôtre aide pour me mettre sur la piste, ou me donner la solution.

    Je desire écrire dans un fichier, jusque là, celà est relativement simple, mais je voudrais écrire seulement un seul bit (0 ou 1 ) dans le fichier.


    J'ai regardé l'API (1.5), et dans DataOutputSteam ou DataOutput, il n'y pas de méthode permettant d'écrire un seul bit, elle permet d'écrire une ou plusieurs "Bytes"(un octet) mais pas un unique bit.

    C'est pourquoi, je me demandais si l'un d'entre vous peux me mettre sur la piste.
    Merci encore
    [ Modéré par vedaer ]
    -> Ajout du tag dans le titre
    [ Merci de respecter les Règles du Forum ]

  2. #2
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    tu ne peut pas écrire un bit seul dans un fichier. aujourd'hui l'entité la plus petite pour l'écriture dans un fichier est le "byte" (8 bits)
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 106
    Points : 78
    Points
    78
    Par défaut Si si
    En faites, j'ai fouiné, et il existe des classes déjà faites, en faites, il suffisé de créer une class BitOutputSteam et BitInputStream qui héritaient de FilterIn/OutputStream afin de pouvoir écrire une seul bit dans un fichier, flot bit à bit aussi bien pour la lecture que pour l'ecriture.



    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    import java.io.*;
    /**
     * Classe permettant la lecture dans un flot bit à bit
     * @author Forax the best of us
     * @version 1.0
     */
    public class BitInputStream extends FilterInputStream {  
      int bits;
      int mask;
     
      public BitInputStream(InputStream in) {
        super(in);
      }
     /**
      * Reads the next bit from this input stream. The value is returned as an
      * int in the range 0 to 1. If no bit is available because the end of the stream
      * has been reached, the value -1 is returned.
      * This method blocks until input data is available, the end of the stream
      * is detected, or an exception is thrown. 
      */
      public int readBit() throws IOException {
        int bits;
        int mask=this.mask;
     
        if (mask==0) {
          bits=read();
          if (bits==-1)
            return -1;
     
          this.bits=bits;
          mask=0x80;
        }
        else {
          bits=this.bits;
        }
     
        if ((bits & mask)==0) {
          this.mask=mask>>1;
          return 0;
        }
        else {
          this.mask=mask>>1;
          return 1;
        }
      }
     
    }
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    import java.io.*;
    /**
     * Classe permettant l'écritre dans un flot bit à bit
     * @author Forax for ever
     * @version 1.0
     */
     
    public class BitOutputStream extends FilterOutputStream {
      int bits;
      int offset;
     
      public BitOutputStream(OutputStream out) {
        super(out);
      }
    /**
     * Writes the specified bit to this output stream. 
     @param bit - the bit
     */
      public void writeBit(int bit) throws IOException {
        if (bit==0) {
          bits<<=1;
        }
        else {
          bits=bits<<1|1;
        }
        offset++;
        if (offset==8) {
          write(bits);
          bits=0;
          offset=0;
        }
      }
     
      /** flush the output stream.
       */
      public void flush() throws IOException {
        if (offset!=0) {
          write(bits<<(8-offset));
          offset=0;
        }
        super.flush();
      }
      /** close  the output stream.
       */
      public void close() throws IOException {
        flush();
        super.close();
      }
    }
    Voilà, j'y avais penser à faire skil a faire, un sorte de tampon et à la fin de combler.
    C'est comme tout en java, on peux tout faire, mais il faut trouver le moyen de le faire.

    Merci qd meme divxdede.[/code]

  4. #4
    duj
    duj est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Points : 474
    Points
    474
    Par défaut
    Remarque quand même que tu écrit bien 8 bits dans ton fichier et pas un seul bit.

    Comme l'a dit divxdede, on ne peut écrire que par byte, dans un fichier
    Parfois, Google fait des miracles

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 106
    Points : 78
    Points
    78
    Par défaut certes certes
    Certes, je suis d'accord avec toi, mais comme on dit, il existe toujours une solution à un probleme ^^.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/04/2009, 13h02
  2. Réponses: 3
    Dernier message: 04/03/2009, 11h35
  3. Ecriture d'un code hexadecimale dans un fichier...
    Par kore62 dans le forum Langage
    Réponses: 2
    Dernier message: 13/09/2008, 18h03
  4. Ecriture et lecture de class dans un fichier
    Par Dam06 dans le forum C++
    Réponses: 1
    Dernier message: 17/04/2008, 10h25
  5. detecter une ligne a un seul mot dans un fichier txt
    Par malikoo dans le forum Général Python
    Réponses: 9
    Dernier message: 04/07/2007, 19h43

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