我有一个使用Java ME8在Raspberry Pi(RPi)板上运行的java代码,RPi上的代码使用串行通信与设备通信。数据以帧的形式交换。
从设备接收数据到Rpi时,getInputStream.read(byte []字节)阻塞并且代码被挂起。我无法在while循环中实现超时,例如,如果我没有rcecive任何超过40秒的东西都应该终止。
我的代码是:
private void receivePacket(long timeOut) throws IOException
{
//timeOut = 120;
Arrays.fill( awkByte, (byte)0x00 );
Arrays.fill( rec, (byte)0x00 );
System.out.println("Receiving");
i = 0;
k = 0;
// initalizes a byte array to receive data
//awkByte[0] = (byte) 0xFF;
int num = 0;
long x = 0;
x = System.currentTimeMillis();
while(System.currentTimeMillis()<=(x+timeOut) )
{
Arrays.fill( awkByte, (byte)0x00 );
num = 0;
System.out.println("in while");
k = 0;
num = connection.getInputStream().read(awkByte);
if(num <= 0)
{
break;
}
System.out.println("num : " + num);
while(num>0)
{
rec[i] = awkByte[k];
i++;
k++;
num--;
}
}
System.out.println("received : ");
for(int j = 0 ; j < rec.length ; j++)
{
System.out.print(rec[j] + "\t");
}
}
仅供参考:我的代码中没有使用任何多线程。
我获得的字节数少于预期,循环在read()处终止或阻塞。
答案 0 :(得分:0)
先检查然后阅读。
if (connection.getInputStream().available() > 0) {
num = connection.getInputStream().read(awkByte);
} else {
// do something?
}