我的问题是为什么串口每次串口读取的数据都是一个字节,而不是把整个字符串读取出来。例如下面的程序读取的内容为
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("------");
}我做的应用是从串口中接受温度,湿度信息然后插入数据库,现在每次读取的数据都是分开的,有没有方法可以一次性的接受传感器发送的单次数据
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("------");
}我做的应用是从串口中接受温度,湿度信息然后插入数据库,现在每次读取的数据都是分开的,有没有方法可以一次性的接受传感器发送的单次数据
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]。
然后通过br.readLine();
data的类型也需要改.