从InputStream显示整行

时间:2017-04-18 18:32:47

标签: java netbeans javafx

我在从COM端口读取内容时遇到问题,我在JavaFX应用程序中使用txrx库。这是显示它正在阅读的内容的代码:

    public void serialEvent(SerialPortEvent evt) {
        String bytesin = null;
        String fullLine = " ";


        if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
        {
            try
            {
                byte singleData = (byte)input.read();

                if (singleData != CR_ASCII)
                {
                    bytesin = new String(new byte[] {singleData});
                    fullLine = fullLine+bytesin;
                    System.out.println(fullLine);
                }
                else if ( singleData == CR_ASCII)
                {
                    System.out.println("CR detected!");
                }
                else
                {
                    statusLabel.setText("Read!");
                }
                }
            catch (Exception e)
            {
                statusLabel.setText("Failed to read data. (" + e.toString() + ")");
                System.out.println("Failed to read data. (" + e.toString() + ")");

            }
        }


}

==该代码的问题在于它每行显示一个字符。 我的USB设备输出以下文本(字符是ASCII,而不是字符):

**T-Pod-1Ch**(Char 13)(Char 10)

但是我的代码输出给出了这个:

 *
 *
 T
 -
 P
 o
 d
 -
 1
 C
 h
 *
 *
CR detected!


 *
 *
 T
 -
 P
 o
 d
 -
 1
 C
 h
 *
 *
CR detected!

2 个答案:

答案 0 :(得分:0)

(byte)input.read()读取单个字节,System.out.println(fullLine)打印此字符,然后打印一个新行。所以代码有效。请尝试使用System.out.print(fullLine)

答案 1 :(得分:0)

从流中读取一行文本的常用方法是使用readLine()中的BufferedReader方法。你有什么理由不能做到:

BufferedReader reader = new BufferedReader(new InputStreamReader(input));

// ...

String fullLine = reader.readLine();
System.out.println(fullLine);

而不是一次尝试读取一个字节(并且基本上重新发明了轮子)。