我有这个问题:Why does my InputStream hold old values?
我以为我能够通过提供的答案解决它,但我没有。
我正在向IR接收器发送IR信号,IR接收器通过BT模块传递到Android应用程序的InputStream。每次我按下发射器上的一个按钮,我发送100个字节,然后我希望进入InputStream。
在我获得一个数据包3秒后,有没有办法忽略所有传入的字节?即使他们到达我想跳过它们,也不要把它们放入缓冲区。但是在那3秒之后我又想再听一下传入的InputStream
字节流。
我需要这个,因为有时会有一些虚拟字节来自IR发射器,或者当用户意外按下按钮两次时(我不希望数据被发送两次)。我只需要3秒钟的时间"冷却时间"。
我的read
功能:
public int read(final InputStream input, final byte[] buffer) throws IOException {
int remaining = buffer.length;
while (remaining > 20) {
final int location = buffer.length - remaining;
final int count = input.read(buffer, location, remaining);
if (count == -1) { // EOF
break;
}
remaining -= count;
}
return buffer.length - remaining;
}
我可以使用skip(long n)
功能吗?我可以定义任何数字n
,因为我不知道我想跳过多少字节?我只是想跳过这3秒内的所有内容。
答案 0 :(得分:0)
skip方法是阻塞方法;一旦你打电话,下一个流过流媒体的数据就会丢失而且无法恢复,所以如果在你预期的字节之前没有显示任何内容,你可能会丢失数据。你可以设置一个计时器Thread休眠3秒;当它唤醒时,你可以让它将一个静态布尔值更改为IR监听器类,所以当你的read()方法成功地从流转发器中检索数据时,你可以决定是保留它还是忽略它。