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

Signaler
Messages postés
78
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
14 octobre 2008
-
Messages postés
78
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
14 octobre 2008
-
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!!

6 réponses

Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
98
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
Messages postés
78
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
14 octobre 2008

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!!
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
98
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
Messages postés
78
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
14 octobre 2008

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!!
Messages postés
78
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
14 octobre 2008

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!!
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
98
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