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

Java Discussion :

Buffer de taille fixe en buffer de taille aléatoire selon donné reçu?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut Buffer de taille fixe en buffer de taille aléatoire selon donné reçu?
    bonjour je lis les informations recu via mon port com comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    byte[] readBuffer = new byte[20];
     
    	    try {
     
    		while (inputStream.available() > 0) {
    		    int numBytes = inputStream.read(readBuffer);
    		} 
     
    		System.out.print(new String(readBuffer));
    	    }
    Le problème est qu'avec ce code j'ai 20 caractère qui s'affiche or je voudrai obtenir juste les infos envoier .

    Je doit utiliser length??

    mais comment??
    j'ai essai byte[] readBuffer = new byte[length]; //erreur
    byte[] readBuffer = new byte.length; //erreur

    donc je sais pas


    c'est peut etre pas ça??

    merci pour votre aide

    edit: Je suis sous NetBeans 6.1et mandriva 2008

  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
    Citation Envoyé par Bouboukick Voir le message
    Le problème est qu'avec ce code j'ai 20 caractère qui s'affiche or je voudrai obtenir juste les infos envoier .
    Développe un peu plus la question, j'ai pas suivi là!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut
    ok, alors j'ai un ptit prog qui permet de ce connecter via mon port com. Et il attent des réponse via le port COM. pour tester cela j'ai un 2em pc qui permet d'envoier des données.

    Le bout de code donnée précédement permet l'affichage de ce que j'ai envoier avec l'autre pc. (j'ai envoier OK) mais e me retrouve avec ceci comme affichage :
    OK suivit de 18 carré

    Or j'aimerais n'avoir que OK d'affiché et je sais que le problème vient du byte[20] pour 20 caractère mais je sais pas comment lui dire de ne prendre que le mot envoier ici en l'occurence ok mais ensuite cela peut etre plus long.

    J'espère que je t'ai éclairé.

    ci dessous le code complet:
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
     
     
    public class Read implements Runnable, SerialPortEventListener {
        static CommPortIdentifier portId;
        static Enumeration	      portList;
        InputStream		      inputStream;
        SerialPort		      serialPort;
        Thread		      readThread;
     
        public static void main(String[] args) {
        boolean		      portFound = false;
        String		      defaultPort = "/dev/ttyS0";
     
     	if (args.length > 0) {
    	    defaultPort = args[0];
    	} 
     
    	portList = CommPortIdentifier.getPortIdentifiers();
     
    	while (portList.hasMoreElements()) {
    	    portId = (CommPortIdentifier) portList.nextElement();
    	    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
    		if (portId.getName().equals(defaultPort)) {
    		    System.out.println("Found port: "+defaultPort);
    		    portFound = true;
    		    Read reader = new Read();
    		} 
    	    } 
    	} 
    	if (!portFound) {
    	    System.out.println("port " + defaultPort + " not found.");
    	} 
     
        } 
     
        public Read() {
    	try {
    	    serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
    	} catch (PortInUseException e) {}
     
    	try {
    	    inputStream = serialPort.getInputStream();
    	} catch (IOException e) {}
     
    	try {
    	    serialPort.addEventListener(this);
    	} catch (TooManyListenersException e) {}
     
    	serialPort.notifyOnDataAvailable(true);
     
    	try {
    	    serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
    					   SerialPort.STOPBITS_1, 
    					   SerialPort.PARITY_NONE);
    	} catch (UnsupportedCommOperationException e) {}
     
    	readThread = new Thread(this);
     
    	readThread.start();
        }
     
        public void run() {
    	try {
    	    Thread.sleep(20000);
    	} catch (InterruptedException e) {}
        } 
     
        public void serialEvent(SerialPortEvent event) {
     
            switch (event.getEventType()) {
     
    	case SerialPortEvent.BI:
     
    	case SerialPortEvent.OE:
     
    	case SerialPortEvent.FE:
     
    	case SerialPortEvent.PE:
     
    	case SerialPortEvent.CD:
     
    	case SerialPortEvent.CTS:
     
    	case SerialPortEvent.DSR:
     
    	case SerialPortEvent.RI:
     
    	case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
    	    break;
     
    	case SerialPortEvent.DATA_AVAILABLE:
    	    byte[] readBuffer = new byte[20];
     
    	    try {
     
    		while (inputStream.available() > 0) {
    		    int numBytes = inputStream.read(readBuffer);
    		} 
     
    		System.out.print(new String(readBuffer));
    	    } catch (IOException e) {}
     
    	    break;
    	}
        } 
     
    }

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu as posté deux fois ta question. Je t'ai répondu dans l'autre post
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut
    il n'y a plus que celui ci des messages l'autre est out

  6. #6
    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
    numbytes contient le nombre de bytes lus, tu devrais utiliser new String(buffer,0,numbytes). Aussi, tu devrais mettre ton print dans la boucle (aficher au fur et à mesure que tu lit)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut
    waou et tu fait cela comment?

    Car je voit pas trop comment tu veux faire

  8. #8
    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
    comme je t'ai dit.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut
    le truc c que je vois pas comment il faut faire

    je met juste new String(buffer,0,numbytes)? mais ou et comment?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 35
    Points
    35
    Par défaut
    J'ai trouvé tout seul la réponse voici donc ce que j'ai fait :

    J'ai laissé mon buffer de taille fixe mais je tronque mon message reçu jusque la fin des caractère voici le code cela sera plus simple.

    Merci à vous

    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
    	case SerialPortEvent.DATA_AVAILABLE:
                String chaine = "";
    	    byte[] readBuffer = new byte[20];
                try
                {
    		while (inputStream.available() > 0)
                    {
                        int numBytes = inputStream.read(readBuffer);
                        for(int i=0; i<numBytes; i++)
                        {
                            chaine = chaine + (char)readBuffer[i];
                        }
    		} 
                System.out.println(chaine);    
    	    }
                catch (IOException e) {}
    	    break;
    Merci bien

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/04/2011, 15h41
  2. div de taille fixe et div de taille variable
    Par pseudodejautilis dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 11/02/2011, 15h38
  3. Pipe et taille maximale du buffer
    Par Slash10 dans le forum Débuter
    Réponses: 1
    Dernier message: 31/03/2010, 22h12
  4. Taille d'un buffer de communication
    Par lolita4882 dans le forum C++
    Réponses: 0
    Dernier message: 16/11/2007, 11h08
  5. stringstream : augmenter la taille initiale du buffer
    Par jeanmarcL dans le forum SL & STL
    Réponses: 2
    Dernier message: 17/04/2007, 21h10

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