论坛首页 Java企业应用论坛

关于Socket.InpuStream的 available() 的用法.

浏览 3449 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-31   最后修改:2011-08-31
在网络编程中,我的习惯是先用InputStream.available()方法来检查是否有可用的数据可以读,如果没有,我就先等着,等有了以后,我再读取。
在等的过程中,我还可以进行超时检测,代码如下所示。
但是最近的项目中遇到一个问题,就是available()方法一直返回的是0,我用BufferedReader.ready()就可以读回来,大家知道是怎么回事儿吗?或者大家都是如何写这种接收的程序呢?
代码如下:
			int len = is.available();
			long t1 = System.currentTimeMillis();
			while (len == 0) {
				
				long t2 = System.currentTimeMillis();
				// 检查接收是否超时,如果超时就抛出异常
				if (this.soTimeout < (t2-t1))
					throw new TimeoutException("接收数据超时:" + (t2-t1) + "ms");
				Thread.currentThread().sleep(10);
				len = is.available();
			}
			byte[] bs = new byte[len];
			this.is.read(bs);
   发表时间:2011-08-31  
在网上看到有说必须要先read(),然后再调用available()方法来检测可以读的数据大小,但是如果真这样操作,对方一直不给发数据,我这边就会一直等,超时不好控制呀。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics