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

Résolu
Bouboukick Messages postés 78 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 14 octobre 2008 - 20 mai 2008 à 11:28
Bouboukick Messages postés 78 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 14 octobre 2008 - 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!!

6 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 mai 2008 à 13:21
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
3
Bouboukick Messages postés 78 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 14 octobre 2008
21 mai 2008 à 14:57
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!!
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 mai 2008 à 11:59
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
0
Bouboukick Messages postés 78 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 14 octobre 2008
20 mai 2008 à 12:15
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!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bouboukick Messages postés 78 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 14 octobre 2008
20 mai 2008 à 17:00
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!!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 mai 2008 à 17:16
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
0
Rejoignez-nous