我编写了一个 Java 方法,通过串行端口向远程设备发送指令,并获得已知数量的字节作为答案。该代码使用 librxtx-java 库在 RaspberryPi 上运行。验证远程设备发送预期长度的答案。
下面的代码是此方法的最后一部分,其中 RaspberryPi 等待答案的所有字节直到给定时间“t_max”。
代码在System.arraycopy
. 如果我通过 try...catch 包装 arraycopy 指令并在 catch 处打印出指针变量,则确实存在索引溢出。
但是,如果我取消注释打印出指针值的行,则不再有例外。即使将这一行替换为System.out.println("X");
使异常消失,但System.out.print("X");
例如没有。
我尝试将变量更改为 volatile 但没有更多的运气。打印到终端如何改变变量的值?
long t0 = System.currentTimeMillis();
long t = t0;
byte[] answer = new byte[answerLength];
byte[] readBuffer = new byte[answerLength];
int numBytes = 0;
int answerPointer = 0;
while (t - t0 < t_max) {
try {
if (inputStream.available() > 0) {
numBytes = inputStream.read(readBuffer);
}
} catch (Exception e) {
}
if (numBytes > 0) {
// System.out.println("answerPointer="+answerPointer);
System.arraycopy(readBuffer, 0, answer, answerPointer, numBytes);
answerPointer = answerPointer + numBytes;
}
if (answerPointer == answerLength) {
return (answer);
}
t = System.currentTimeMillis();
}