请教串口通信问题(Java)--用java串口程序读取不是一整条信息 我的问题是为什么串口每次串口读取的数据都是一个字节,而不是把整个字符串读取出来。例如下面的程序读取的内容为 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; }
------解决方案-------------------- read()从输入流读取下一个数据字节,要整个读出来你可以用read(byte[] b)
------解决方案--------------------
------解决方案-------------------- 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]。
------解决方案--------------------
------解决方案-------------------- 建议你进行封装 BufferedReader br = new InputStreamReader(inputStream) 然后通过br.readLine(); data的类型也需要改.