简单的问题 - 是否有一种方法可以在数据到达输入流时触发事件?
在our open source project中,我们只是循环,直到我们看到消息字符结束(沿着路径拼接消息)。循环在循环之间暂停300ms以降低CPU利用率,但这仍然与“事件驱动编程”相差甚远。
睡眠时间过长对吞吐量不利 睡眠太短对CPU,其他进程和上下文切换密集有害。我想清理上面链接中的readUpToCharacter
函数,以便以事件驱动的方式等待数据。
为这个看似常见的问题寻找一些聪明的设计模式。
感谢!!!
答案 0 :(得分:2)
启动一个执行阻塞读取的新线程,并在数据到达时引发事件?
答案 1 :(得分:1)
根据输入流(如果它是具有底层文件描述符的输入流),您可以使用NIO Selector类来等待文件描述符准备好进行读取。
不幸的是,Android上提供的蓝牙流不提供对底层文件描述符的访问,并且available
方法无法从一个Android设备可靠地工作到另一个Android设备,因此目前无法从您想要的地方做到Java代码。
编辑:我应该注意InputStream.available
方法适用于某些Android设备(根据我的经验,使用Google的Android蓝牙端口实现的Nexus 1和早期HTC设备运行良好;三星和更新的HTC设备使用供应商提供的蓝牙端口实现可能会失败)因此,如果您的应用程序将部署在已知的设备子集上,您可能会很好地使用此选项。