java InputStream中read()方法的阻塞问题

wgd81685 2015-04-08 08:49:56
本人因为业务需求,需要频繁的调用InputStream中的read()方法从硬件中获取数据,
因为read()方法是阻塞的,如果硬件一直没有数据发过来的话,read()方法会一直阻塞,
但是业务要求如果硬件超过一定时间没有发送信息过来,需要给出提示,这样为了确保能够判断硬件是否有信息发过来,我在read()之前增加了available()进行判断,如果5秒内available()方法返回值都是0的话就说明硬件通讯故障。
但是这样又产生了一个新问题,原本直接调用read()方法时,与硬件进行一次完整的通讯需要大概400毫秒,增加available()方法后时间变为了800毫秒,这个时间又无法接受。不知道哪位大神有好办法解决这个问题!!!!!!!
...全文
1245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-11-04
  • 打赏
  • 举报
回复
qq_35881076 2016-11-03
  • 打赏
  • 举报
回复
楼主,我现在的情况跟您差不多,但是如果我调用available方法就会抛出ioctl failed: EINVAL异常。。。您知道为什么吗?
wgd81685 2015-04-17
  • 打赏
  • 举报
回复 1
引用 5 楼 wangxf_8341 的回复:
[quote=引用 4 楼 u013161087 的回复:] 我有个疑问,你是怎么使用available来判断的呢?先判断再read??如果是这样的话,你怎么实现的5秒内判断available为0呢?
先available一把,为0 就sleep 5秒,完了再available一把[/quote] 正解
淡定的峰哥 2015-04-13
  • 打赏
  • 举报
回复
引用 4 楼 u013161087 的回复:
我有个疑问,你是怎么使用available来判断的呢?先判断再read??如果是这样的话,你怎么实现的5秒内判断available为0呢?
先available一把,为0 就sleep 5秒,完了再available一把
朱容赋 2015-04-13
  • 打赏
  • 举报
回复
我有个疑问,你是怎么使用available来判断的呢?先判断再read??如果是这样的话,你怎么实现的5秒内判断available为0呢?
天然居 2015-04-12
  • 打赏
  • 举报
回复
您好 请问捏个5秒钟内available()是怎么判断的 不是一直阻塞在inputStream.read()方法了吗
冥王之锤 2015-04-09
  • 打赏
  • 举报
回复
进行调优,先看哪一步花费的时间多,进行优化。 如果代码比较简单,先打写时间日志,定位下。
Hare_ 2015-04-09
  • 打赏
  • 举报
回复
与硬件交互还是用c来搞个库,让java再调用!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧