【发布时间】:2014-04-25 08:58:57
【问题描述】:
我确实通过 Java 读取 Linux 中的串行接口文件。有时我只需要丢弃所有数据,只读取新数据。
解释:有大量数据并且新数据即将到来,所以我必须丢弃现有缓冲区并开始等待新数据。外部板只是不断发送。我最终读取了旧数据,只是在几次迭代中我就有了当前值。我只需要跳到结束并等待新数据集,而不是阅读所有旧废话。
String file = "/dev/ttyO1";
FileInputStream inputStream = new FileInputStream(file);
private static byte[] readUntil(InputStream in, int timeout) throws IOException {
// long lastTime = System.currentTimeMillis();
while (true) {
if (in.available() > 0) {
if (in.read() == 83)
break;
}
try { Thread.sleep(20); } catch (Exception e) {}
}
byte[] text = new byte[10];
for (int i = 0; i < 10; i++) {
text[i] = (byte) in.read();
if (text[i]=="E".getBytes()[0]) break;
try { Thread.sleep(20); } catch (Exception e) {}
}
in.read(); // just read last one
return text;
}
我只是不知道如何丢弃现有数据并只读新数据。
【问题讨论】:
-
您究竟需要什么帮助?我不明白。
-
Thread.sleep(20)的目的是什么?? -
Thread.sleep(20) - 我的本意是为了节省处理器功率...我可能错了...
-
我不明白这个问题。尽可能快地读取所有数据。当数据不可用时,读取将阻塞。因此,可用/睡眠循环是没有意义的。我不明白你的问题是什么。