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 :

Stockage de données reçues dans un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut Stockage de données reçues dans un tableau
    Bonjour à tous,
    je voudrais stocker les données que je reçois a partir de ma carte embarquée sous un tableau pour que je puisse afficher que ce donc j'ai besoin.

    voici ma fonction

    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
     
        public void serialEvent(SerialPortEvent evt) {
     
            if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
            {
               System.out.println("Data available event received");
                try
                {
                    byte singleData = (byte)input.read();
     
                    if (singleData != NEW_LINE_ASCII)
                    {
                      System.out.println("Reçu : "+singleData); 
     
                        logText = new String(new byte[] {singleData});
                        window.txtLog.append(logText);
                        System.out.println("le LogText est : "+logText+"\n");
     
                    }
                    else
                    {
                        window.txtLog.append("\n");
                    }
                }
     
                catch (Exception e)
                {
                    logText = "Failed to read data. (" + e.toString() + ")";
                    window.txtLog.setForeground(Color.red);
                    window.txtLog.append(logText + "\n");
                }
            }
           // waiting(1);
     
        }
    je reçois données de ce genre :

    Data available event received
    Reçu : 82
    le LogText est : R

    Data available event received
    Reçu : 70
    le LogText est : F

    Data available event received
    Reçu : 69
    le LogText est : E

    Data available event received
    Reçu : 1
    le LogText est : 

    Data available event received
    Reçu : -112
    le LogText est : �

    Data available event received
    Reçu : 2
    le LogText est : 

    Data available event received
    Reçu : 2
    le LogText est : 

    Data available event received
    Reçu : 14
    le LogText est : 

    Data available event received
    Reçu : 3
    le LogText est : 

    Data available event received
    Reçu : 1
    le LogText est : 

    Data available event received
    Reçu : 12
    le LogText est :

    Data available event received
    Reçu : 0
    le LogText est :

    Data available event received
    Reçu : 83
    le LogText est : S

    Data available event received
    Reçu : 84
    le LogText est : T

    Data available event received
    Reçu : 80
    le LogText est : P

    Data available event received
    Reçu : 48
    le LogText est : 0

    Data available event received
    Reçu : 50
    le LogText est : 2

    Data available event received
    Reçu : 57
    le LogText est : 9

    Data available event received
    Reçu : 51
    le LogText est : 3

    Data available event received
    Reçu : 57
    le LogText est : 9

    Data available event received
    Reçu : 51
    le LogText est : 3

    Data available event received
    Reçu : 4
    le LogText est : 

    Data available event received
    Reçu : -111
    le LogText est : �
    j'aimerais afficher que
    STP029393

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Il faut créer le tableau en dehors de serialEvent(), avant qu'elle puisse être appelée.
    Puis à chaque fois que tu reçois quelque chose, tu dois vérifier s'il n'est pas temps d'utiliser ce qu'il y a dans le tableau, et le vider.

    (Je recommanderais un ByteBuffer plutôt qu'un tableau, moi. Au moins le ByteBuffer se rappelle à quel endroit on a inséré en dernier.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Merci pour votre réponse rapide
    ce que je ne comprends pas c'est : comment je pourrais récupérer ma donnée en dehors de la fonction serialEvent ?
    je suis un peu novice pour ce qui est de l'embarquer

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Je vois pas le rapport avec l'embarqué.

    Imaginons une classe comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Truc {
      private ByteBuffer buffer = ByteBuffer.allocate(512);
     
      public void biduleEvent(Chose machin) {
        System.out.println("Le buffeur a une capacité de ");
      }
    }
    Comment t'y prendrais-tu pour accéder à l'objet buffer à l'intérieur de la méthode biduleEvent() ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Truc {
      private ByteBuffer buffer = ByteBuffer.allocate(512);
     
      public void biduleEvent(Chose machin) {
        System.out.println("Le buffeur a une capacité de ");
        buffer.put(int i, byte valeur) ?  
     
    }
    }

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Euuuh, non.

    Appeler une méthode. Tu sais comment on fait ça, appeler une méthode ? Montre-moi un exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    j'ai mal compris ce que vous me demandiez

    pour appeler la méthode

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Ouais c'est pas mal.
    Maintenant, appeler une méthode, d'un autre objet que l'objet en cours. Genre appeler la méthode put() de l'objet buffer. Ça ressemble à quoi, ça ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    buffer.biduleEvent()

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Ouais ça ressemble à ça. Sauf que l'objet buffer a pas de méthode biduleEvent(). Mais disons la méthode put(), avec deux paramètres ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    buffer.put(biduleEvent());  // c'est sa ? sans prendre en charge l'indexation

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Mais de quoi tu parles ? Je te demande si tu sais faire un appel de méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte a = 5;
    buffer.put(8, a);
    Voilà, c'est un appel de méthode, la méthode put() de l'objet buffer. Et il y a deux paramètres. Simple.

    Donc, dans le code que tu nous as montré plus haut, la ligne buffer.put(int i, byte valeur), est-ce qu'elle a l'air correcte d'après toi ?
    C'est quoi ce int c'est quoi ce byte ?
    et i et valeur c'est quoi ?

    Corrige ce code et recommence. Dans la classe que j'ai montrée, comment ferais-tu pour accéder à l'objet buffer ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    buffer.put(int i , byte valeur)
    je l'es déclaré dans un cas général pour dire que le i est un int , et valeur est byte , après vous me ditent que c'est pas du tout sa , donc je me suis posé des questions et je me suis embrouiller tout seul ...

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Et ça t'arrive souvent, dans des appels de méthodes, de dire qu'un paramètre est un int, l'autre est un byte et leur définir des noms sans leur donner une valeur ?
    Moi mon compilateur, il accepte pas...

    T'as remarqué que dans l'appel buffer.put(8, a); ça ressemble pas du tout ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    je me suis peut être mal exprimer excuse moi.

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Pas de soucis. Donc, tu sais où tu en es, ou tu es toujours bloqué sur la question :

    Imaginons une classe comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Truc {
      private ByteBuffer buffer = ByteBuffer.allocate(512);
     
      public void biduleEvent(Chose machin) {
        System.out.println("Le buffeur a une capacité de ");
      }
    }
    Comment t'y prendrais-tu pour accéder à l'objet buffer à l'intérieur de la méthode biduleEvent() ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Truc {
      private ByteBuffer buffer = ByteBuffer.allocate(512);
     
      public void biduleEvent(Chose machin) {
         buffer.put(data); 
         System.out.println("Le buffeur a une capacité de ");
        }
     }
    mais j'ai pu avancer de mon coté et j'ai remarqué qu'avec un StringBuffer.append sa me facile encore plus la tache pour l'affichage ensuite.

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Ok. Tant que c'est de l'ASCII, c'est pas un problème de convertir byte -> char directement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Par défaut
    j'ai réussi a faire un truc dans ce genre
    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
     
     
        public void serialEvent(SerialPortEvent evt) {
     
            if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
            {
     
               //System.out.println("Data available event received");
                try
                {
                    byte singleData = (byte)input.read();
     
                    if (singleData >= Debut_caracter && singleData != 82 && singleData != 70 && singleData != 69)
                    {     
     
                      logText =new String(new byte[] {singleData});
                      stringBuffer.append(logText);
     
                    }   
                    if (singleData < 0) 
                      { 
     
                        System.out.println("le LogText est : "+stringBuffer+"\n");
                        window.txtLog.append("\n"); 
                        stringBuffer.setLength(0);
                        waiting(1);  // methode pour wait 10 milisecond 
                      }
                  }
     
                catch (Exception e)
                {
                    logText = "Failed to read data. (" + e.toString() + ")";
                    window.txtLog.setForeground(Color.red);
                    window.txtLog.append(logText + "\n");
                }
            }
        }
    je récupere bien mon buffer =) mais es ce que le code est optimal ??? je demande votre point de vue

  20. #20
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par samybelarbi Voir le message
    mais es ce que le code est optimal ??? je demande votre point de vue
    * logText =new String(new byte[] {singleData});.

    Pas génial :
    - Aucun besoin de construire une String pour transmettre un seul caractère. Il vaut mieux un char.
    - Bien qu'en ne gérant que de l'ASCII le risque soit faible, il faut éviter le constructeur String(byte[]) qui n'indique pas le charset à utiliser. Car il utilise alors le charset par défaut de la machine, et tout le monde n'a pas le même. Il faut indiquer celui qu'on veut, pas laisser la machine décider et se tromper. Si on veut de l'ASCII, on dit StandardCharsets.US_ASCII.
    - logText devrait être une variable locale.

    Donc ça donne :

    char logText = (char)singleData; // Ne marche qu'en ASCII et latin-1 bien sûr.

    * StringBuffer fait des synchronisations qui sont coûteuses et probablement inutiles
    (si plusieurs threads non synchronisés pouvaient appeler serialEvent(), les données arriveraient dans le désordre et StringBuffer ne pourrait rien y faire. J'imagine que ce n'est pas le cas.)

    Dans ton cas... c'est sans importance. De toute façon recevoir des caractères d'un autre périphérique c'est long.
    Mais il vaut mieux s'habituer à utiliser StringBuilder au lieu de StringBuffer. C'est pareil, mais sans les synchronisations inutiles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Stockage de données sql dans un tableau en visual basic 6.0
    Par moirs555 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/10/2011, 06h10
  2. Réponses: 1
    Dernier message: 18/07/2007, 18h44
  3. Réponses: 1
    Dernier message: 09/07/2007, 17h13
  4. [xsl-fo]Problème de données dynamiques dans un tableau.
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/05/2007, 10h35
  5. [Conception] Afficher les données (BDD) dans un tableau en PHP
    Par ox@na dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2006, 15h24

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