Buffer de taille fixe en buffer de taille aléatoire selon donné reçu? [Résolu]

Bouboukick 78 Messages postés jeudi 14 février 2008Date d'inscription 14 octobre 2008 Dernière intervention - 20 mai 2008 à 11:28 - Dernière réponse : Bouboukick 78 Messages postés jeudi 14 février 2008Date d'inscription 14 octobre 2008 Dernière intervention
- 21 mai 2008 à 14:57
bonjour je lis les informations recu via mon port com comme ceci :

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
byte[] readBuffer = newbyte[20];
 
try{

while(inputStream.available() > 0){
int numBytes = inputStream.read(readBuffer);
}
 
System.out.print(new String(readBuffer));
}

<!-- END TEMPLATE: bbcode_code -->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

  Je suis sous NetBeans 6.1et mandriva 2008

Bretzel : Tout est be qui finit bien!!
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 20 mai 2008 à 13:21
3
Merci
Salut,

exemple pour la méthode (j'ai la flème pour faire un exemple avec tout) :
replace le case :
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;

par:
case SerialPortEvent.DATA_AVAILABLE:

  byte[] readBuffer = readFully(inputStream);
  System.out.print(new String(readBuffer));
  break;

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de Twinuts
Meilleure réponse
Bouboukick 78 Messages postés jeudi 14 février 2008Date d'inscription 14 octobre 2008 Dernière intervention - 21 mai 2008 à 14:57
3
Merci
J'ai trouvé merci pour ton aide voici mon bout de code me permettant de n'avoir que les données envoiées:

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->case SerialPortEvent.DATA_AVAILABLE:
String chaine = "";
byte[] readBuffer = newbyte[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;

Bretzel : Tout est be qui finit bien!!

Merci Bouboukick 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de Bouboukick
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 20 mai 2008 à 11:59
0
Merci
Salut,

si tu veux tout lire tu peux utiliser:
- la méthode readFully de l'objet java.io.RandomAccessFile
- la classe java.util.Scanner
- la méthode ci-dessous :
public byte[] readFully(InputStream in) {
  try {
    byte buffer[] = new byte[in.available()];
    int n=0, offset=0;
    while(true) {
      int i = in.available();
      n=in.read(buffer, offset, i);
      if (n<=0 || n == i) {
        if (n!=-1)  offset+=n;
        break;
      }
      offset+=n;
    }
    in.close();
    return buffer;
  } catch (IOException e) {
    return null;
  }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts
Bouboukick 78 Messages postés jeudi 14 février 2008Date d'inscription 14 octobre 2008 Dernière intervention - 20 mai 2008 à 12:15
0
Merci
J'ai testé ta réponse un peu partout dans mon programme mais rien à y faire.
Ou doit je le placer?

voici mon prog

package blackbox;
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;
    }
    }

}

Merci deja de ton aide

Bretzel : Tout est be qui finit bien!!
Commenter la réponse de Bouboukick
Bouboukick 78 Messages postés jeudi 14 février 2008Date d'inscription 14 octobre 2008 Dernière intervention - 20 mai 2008 à 17:00
0
Merci
Il me met une erreur sur le readFully.
et je sais pas pourquoi quelqu'un sait pourquoi?

et si vous savais quoi mettre exactement je suis prenant un truc tout fait je suis prenant lol car je m'arrache les cheveux la au secours

Bretzel : Tout est be qui finit bien!!
Commenter la réponse de Bouboukick
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 20 mai 2008 à 17:16
0
Merci
Salut,

c'est un joke là ?

bref raz le bol de perdre mon temps...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.