Java De Série Du Lecteur


J'ai trouvé cet exemple en utilisant la bibliothèque RXTX. Cela fonctionne bien mais j'essaie de comprendre comment cela fonctionne. Voici le morceau de code.

public static class SerialReader implements Runnable 
        {
            InputStream in;
            Robot robot;
            int x;
            int y;
            public SerialReader ( InputStream in , Robot robot)
            {
                this.in = in;
                this.robot = robot;
            }

            public void run ()
            {
                byte[] buffer = new byte[1024];
                int len = -1;
                try
                {
                    while ( ( len = this.in.read(buffer)) > -1 )
                    {

                        System.out.print(new String(buffer,0,len));

                    }
                }
                catch ( IOException e )
                {
                    e.printStackTrace();
                }            
            }
        }

Ce que j'essaie de comprendre, c'est la boucle while. Il semble qu'il charge le tampon à partir du flux d'entrée, mais puisque RS-232 envoie un octet à la fois, je suis confus. Ce que j'essaie d'obtenir, c'est d'obtenir la représentation entière du résultat imprimé.

Author: Barışcan Kayaoğlu, 2013-05-11

1 answers

Qu'est-ce qui est déroutant à ce sujet? Même si les données sont envoyées un octet à la fois, une séquence d'octets peut être accumulée dans le tampon afin que vous lisiez la séquence entière à la fois. La valeur len est le nombre d'octets reçus dans la séquence. La façon dont vous traitez les données reçues peut cependant être modifiée pour refléter vos attentes. Essayez par exemple de remplacer ceci

System.out.print(new String(buffer,0,len));

Avec ceci:

StringBuffer sb = new StringBuffer();
for (int i = 0; i < len; i++) {
    sb.append(String.valueOf(buffer[i]));
}
System.out.print(sb.toString());
 0
Author: Piovezan, 2013-05-12 12:22:01