gpt4 book ai didi

java - 从流读取时出现 IndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 04:13:34 26 4
gpt4 key购买 nike

我编写了一个 Java 方法,通过串行端口向远程设备发送指令,并获取已知字节数作为答案。该代码使用 librxtx-java 库在 RaspberryPi 上运行。远程设备已验证可发送预期长度的答案。

下面的代码是该方法的最后一部分,其中 RaspberryPi 在给定时间“t_max”内等待答案的所有字节。

代码在 System.arraycopy 期间抛出 IndexOutOfBoundsException。如果我通过 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();
}

最佳答案

您是否尝试过验证输出流和输入流是否以任何方式链接?可能输入流正在从输出流读取,并且“\n”(新行)被用作流字符的结尾。您可以尝试打印到字节数组输出流周围的打印流包装而不是标准输出,并查看执行 ps.println("X") 是否会导致异常?如果它确实导致异常,那么标准输出和输入流可能是链接的,这就是为什么执行 System.out.println("X") 会使异常消失。

此外,volatile关键字在线程上下文中使用。在单线程环境下不会有任何影响。

关于java - 从流读取时出现 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com