Java读取给定时间段的串行数据。
我有一个从嵌入式设备读取串行数据的功能。我的程序显示一张图片和一个标题,基本上这个设备就像一个游戏的蜂鸣器。是否有办法检查串行数据5秒钟,如果没有收到任何数据,则继续代码(转到下一张图片和标题)。我当前的函数如下所示Java读取给定时间段的串行数据。,java,embedded,serial-port,bufferedreader,Java,Embedded,Serial Port,Bufferedreader,我有一个从嵌入式设备读取串行数据的功能。我的程序显示一张图片和一个标题,基本上这个设备就像一个游戏的蜂鸣器。是否有办法检查串行数据5秒钟,如果没有收到任何数据,则继续代码(转到下一张图片和标题)。我当前的函数如下所示 public String getUARTLine(){ String inputLine = null; try{ BufferedReader input = new BufferedReader(new Inp
public String getUARTLine(){
String inputLine = null;
try{
BufferedReader input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
inputLine = input.readLine();
if (inputLine.length() == 0)
return null;
} catch (IOException e){
//System.out.println("IOException: " + e);
return null;
}
return inputLine;
}
放下缓冲区。自己开始读取输入流,并在不同的线程计数5秒钟内读取。之后,关闭流(这将导致read函数返回-1)。可以。您可以使用一个单独的计时器线程来触发关闭输入流的超时(这将导致input.readLine()返回IOException)。或者你可以使用。但是我个人更喜欢第一种方法。您可以开始从serialPort读取数据,并在其他线程中启动计时器。大概是这样的:
class ReadItWithTimeLimit implements Runnable {
int miliSeconds;
BufferedReader reader;
public ReadItWithTimeLimit (BufferedReader reader, int miliSeconds) {
this.miliSeconds = miliSeconds;
this.reader = reader;
}
public void run() {
Thread.sleep(miliSeconds);
this.reader.close();
}
}
因此,您可以从代码中调用它:
// ...
BufferedReader input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
new Thread(new ReadItWithTimeLimit(input, 5000)).start();
inputLine = input.readLine();
// ...
此代码没有excaption处理,因此需要一些最终工作…此代码只读取数据一次,不允许您在5秒钟内读取数据。