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

Collection et Stream Java Discussion :

lecture fichier et tableau de BigInteger


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut lecture fichier et tableau de BigInteger
    Bonsoir

    je souhaite lire un fichier par bloc de 1024 bit que je mettrai dans un tableau de BigInteger un bloc (1024) par case.
    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
     
     
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.math.BigInteger;
     
    public class EntreeSortie {
     
      public EntreeSortie(){}
     
      public BigInteger[] lire()
       {
         BigInteger []b=new BigInteger[7]; int i=0;
            try{
                  FileInputStream fin = new FileInputStream("data.txt");
                  BufferedInputStream bin = new BufferedInputStream(fin,1024);
     
      while((b[i]=BigInteger.valueOf(bin.read())).compareTo(BigInteger.ZERO)>0)
                {
                        i++;
                        System.out.print("\n"+b[i]);
                 }
     
                }
            catch(IOException e){System.out.println(e.getMessage());}
    return b;       
    	}
    Je n'arrive pas à comprendre pour quoi il affiche null!!! c'ad le tabelau est vide!!!
    Quand je met j'ai 801 octet!!! alors que moi j'ai spécifiée 1024 bit donc 128 octet!!

    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pourquoi tu fait de read() (qui retournent 8 bits) pour aller stocker ça dans un objet BigInteger? De plus le test correct c'est read()>=0 pas read()>0. 0 est une valeur possible de retour de read normale.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    ok merci sinon comment je peux faire j'ai vraiment besoin de mettre 128 octet dans une case tableau de BigInteger

    Bonne journée

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    Grosso-modo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    byte[] buffer = new byte[128];
    int bufferIndex = 0;
    while(bufferIndex < buffer.length) {
      int nbRead = bin.read(buffer, bufferIndex, buffer.size - bufferIndex);
      if(nbRead < 0) {
        throw new EOFException("Reached unexpected end of byte stream");
      }
      bufferIndex += nbRead;
    }
     
    BigInteger signedBigInt = new BigInteger(buffer); // pour un BigInteger signé
    BigInteger unsignedBigInt = new BigInteger(1, buffer); // pour un BigInteger non signé
    Edit : Je précise que je suppose ici que les octets sont présentés dans l'ordre Big-Endian. En Little-Endian, il faudrait inverser le buffer avant de construire le BigInteger.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    utilise le constructeur BigInteger(byte[] val) , auquel tu lui passera un tableau de 16 bytes lus. A toi évidement de lire correctement ces 16 bytes en utilisant les méthodes de bufferedinputstream

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    Bonjour et merci encore pour votre aide

    J'ai fais quelques progrès bon j'arrive à lire mon fichier par contre quand j'affiche le contenu de mon Vector de BigInteger et bah il y a quelques nombres négatifs et je ne vois pas d'où ceci peut venir!!!!

    exemple
    [7305248852572774509, -1554475106306790032, 8295755261602786336]
    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
    public  Vector<BigInteger> lire(String filename) 
        {
            BufferedInputStream bufferedInput = null; 
            byte[] buffer=new byte[8];
            Vector<BigInteger>  big  =new    
            Vector<BigInteger>();BigInteger b;
     
            try 
            {       
                bufferedInput = new BufferedInputStream(new FileInputStream(filename));
                int nbRead=0;
            //    System.out.println(bufferedInput.available());
                   while (  nbRead != -1) 
                   {
                	   nbRead=bufferedInput.read(buffer);
                	   //System.out.println("\n"+nbRead); 
                	   big.addElement(new BigInteger(buffer));
                	   System.out.println(""+big.toString());
                   }  
     
            } 
            catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } 
            catch (IOException ex) {
                ex.printStackTrace();
            } 
            finally {
     
                try 
                {
                    if (bufferedInput != null)
                        bufferedInput.close();
                } 
                catch (IOException ex) 
                {
                    ex.printStackTrace();
                }
            }
            return big;
        }
    merci à vous

  7. #7
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    byte est signé, donc tu peu avoir une valeur négative. Si tu veux pas que ce soit interprété comme du signé faut que tu regarde dans le message précédent de thelvin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BigInteger unsignedBigInt = new BigInteger(1, buffer); // pour un BigInteger non signé
    La javaDoc est mon amie, elle est la tienne aussi!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    merci

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    J'ajoute que la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbRead=bufferedInput.read(buffer);
    Ne va pas forcément lire 8 octets même si le buffer fait 8 octets. Comme l'indique la JavaDoc, ça lira au plus 8 octets et au moins 1 octet s'il y en a à lire.

    Il faut regarder la valeur de nbRead pour savoir combien d'octets ont été lus. (A priori avec un BufferedReader tu auras presque toujours les 8 octets lus, mais ce n'est pas garanti.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Lecture fichier txt vers tableau alloué
    Par yeboum dans le forum Fortran
    Réponses: 3
    Dernier message: 27/11/2007, 09h31
  2. Lecture d'un tableau dans un fichier
    Par Sachiel31 dans le forum C++
    Réponses: 30
    Dernier message: 19/07/2006, 19h57
  3. C++ lecture d'un tableau dans un fichier
    Par nicoss dans le forum C++
    Réponses: 1
    Dernier message: 28/05/2006, 10h26
  4. Réponses: 3
    Dernier message: 05/02/2006, 22h59
  5. Réponses: 4
    Dernier message: 12/10/2005, 21h22

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