gpt4 book ai didi

java - RXTX java,inputStream不返回所有缓冲区

转载 作者:行者123 更新时间:2023-12-02 07:39:13 30 4
gpt4 key购买 nike

这是我的代码,我正在使用 rxtx

public void Send(byte[] bytDatos) throws IOException {
this.out.write(bytDatos);
}

public byte[] Read() throws IOException {

byte[] buffer = new byte[1024];

int len = 20;

while(in.available()!=0){
in.read(buffer);
}

System.out.print(new String(buffer, 0, len) + "\n");

return buffer;
}

其余代码与 this 相同,我只是更改了两件事。

InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();

它们现在是全局变量并且......

(new Thread(new SerialReader(in))).start();
(new Thread(new SerialWriter(out))).start();

现在不存在...

我正在发送此信息(每秒)

Send(("123456789").getBytes());

这就是我得到的:

123456789123
456789
123456789
1234567891
23456789

有人可以帮我吗?

编辑

后来我找到了更好的方法来解决这个问题。谢谢,这是阅读代码

public byte[] Read(int intEspera) throws IOException {

try {
Thread.sleep(intEspera);
} catch (InterruptedException ex) {
Logger.getLogger(COM_ClComunica.class.getName()).log(Level.SEVERE, null, ex);
}//*/

byte[] buffer = new byte[528];

int len = 0;


while (in.available() > 0) {
len = in.available();
in.read(buffer,0,528);
}

return buffer;
}

我不可能消除 sleep ,但这不是问题,所以,谢谢 veer

最佳答案

您确实应该注意到 InputStream.available定义如下...

Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes.

如您所见,这不是您所期望的。相反,您想要检查流结束,这由 InputStream.read() 指示。返回-1

此外,由于您不记得在读取循环的先前迭代中已经读取了多少数据,因此您可能会覆盖缓冲区中的先前数据,这也不是您想要的。

您似乎想要的是如下内容:

private static final int MESSAGE_SIZE = 20;

public byte[] read() throws IOException {
final byte[] buffer = new byte[MESSAGE_SIZE];
int total = 0;
int read = 0;
while (total < MESSAGE_SIZE
&& (read = in.read(buffer, total, MESSAGE_SIZE - total)) >= 0) {
total += read;
}
return buffer;
}

这应该强制它读取最多 20 个字节,在到达流末尾的情况下会更少。

特别感谢 EJP 提醒我保持帖子的质量并确保它们是正确的。

关于java - RXTX java,inputStream不返回所有缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805300/

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