我的问题是为什么串口每次串口读取的数据都是一个字节,而不是把整个字符串读取出来。例如下面的程序读取的内容为
A-------
d-------
d-------
r------
e-----
s-----
而不是Address=0x1,humidity=62,Temperature=29,Voltage=2315---------
芯片是10秒钟发送一次数据。代码如下:
public void  serialEvent(SerialPortEvent event) {
       int data=0;
       StringBuffer inputbuffer=new StringBuffer();
        switch(event.getEventType()) {
        case SerialPortEvent.BI:/*Break interrupt,通讯中断*/
        case SerialPortEvent.OE:/*Overrun error,溢位错误*/ 
        case SerialPortEvent.FE:/*Framing error,传帧错误*/
        case SerialPortEvent.PE:/*Parity error,校验错误*/
        case SerialPortEvent.CD:/*Carrier detect,载波检测*/
        case SerialPortEvent.CTS:/*Clear to send,清除发送*/
        case SerialPortEvent.DSR:/*Data set ready,数据设备就绪*/
        case SerialPortEvent.RI:/*Ring indicator,响铃指示*/
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty,输出缓冲区清空*/
            break;
                                case SerialPortEvent.DATA_AVAILABLE:/*Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端*/
                 while(data!=-1){
                        try{
                                data=inputStream.read();
                                if(data==-1){
                                        //break;
                                }
                        
                inputbuffer.append((char)data);
            } catch (IOException e) {}
            System.out.print(inputbuffer.toString());
            break;
        
        }
        }
        System.out.println("------");
    }我做的应用是从串口中接受温度,湿度信息然后插入数据库,现在每次读取的数据都是分开的,有没有方法可以一次性的接受传感器发送的单次数据

解决方案 »

  1.   

    read()从输入流读取下一个数据字节,要整个读出来你可以用read(byte[] b)
      

  2.   

    同上,读入到1个缓冲字节数组中,详见API文档。
      

  3.   

    public int read(byte[] b)
             throws IOException从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。 
    如果 b 为 null,将抛出 NullPointerException。如果 b 的长度为 0,则无字节可读且返回 0;否则,要尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少可以读取一个字节并将其存储在 b 中。 将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。让 k 为实际读取的字节数;这些字节将存储在元素 b[0] 至 b[k-1] 之间,不影响元素 b[k] 至 b[b.length-1]。 
      

  4.   

    read(byte[] b)参数可以是一条信息的总长度;这一样不说一次性把信息全读完了哟
      

  5.   

    只能读出8位?你该不是把数组byte[] b的大小只设置为8了吧?你设置大点不就可以了
      

  6.   

    建议你进行封装 BufferedReader br = new InputStreamReader(inputStream)
    然后通过br.readLine();
    data的类型也需要改.
      

  7.   

    我最近也遇到了这个问题 请问楼主“采用了RXTX的包” 是什么意思 能具体说说吗?  谢谢啊
      

  8.   

    楼主在吗 我最近也在学习rxtx有啥经验分享下呗 先谢谢了