我正在尝试向串口发送一个使用Spring Source Tool Suite(Eclipse)。
JDK 1.7。
DEFAULTBAUDRATE设置为9600。
NRSerial是一个库,提供了一个平台无关版本的“已故”的vaxx.comm库。
没有硬件连接到串口。
我正在使用类似Wireshark的应用程序对串口进行嗅探。
我仍然是一名学生,所以代码可能有点糟糕 :P。
以下是有效的代码:
尽管
我想知道我的哪个解决方案更好,或者是否还有其他/更好的方法来解决这个问题。此外,如果方法
byte[]
,但是outputstream.write(byte[]);
仅在byte[].length
小于约100字节时有效。以下是一些需要了解的信息:
byte[]
永远不会超过476个字节。
以下是有效的代码:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
for(int i = 0; i<bytes.length; i++){
if(i%10==0){
Thread.sleep(1);
}
outputStream.write(bytes[i]);
}
outputStream.flush();
outputStream.close();
port.disconnect();
优点:适用于所有系统
缺点:可能会不必要地休眠
这个也是如此:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
for(byte b : bytes){
outputStream.write(b);
}
outputStream.flush();
outputStream.close();
port.disconnect();
优点:没有不必要的睡眠
缺点:在快速系统上可能无法工作,因为它们可以更快地处理for each
但是如果bytes包含超过约100个字节,则下面的代码将失败:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
port.disconnect();
尽管
write(byte[])
是sun库中的有效方法,但我对此有一些想法:
- 我会溢出输出缓冲区,波特率太低无法一次性发送这些数据
write(byte[])
不会将byte[]
分成更小的部分
我想知道我的哪个解决方案更好,或者是否还有其他/更好的方法来解决这个问题。此外,如果方法
write(byte[])
的处理能力取决于硬件,为什么不在JavaDoc中说明呢?