inputstream.read 方法的阻塞问题

勇敢小鱼 2014-09-15 03:44:26
我现在将inputstream.read(buffer, 0, buffer.length) 放在线程中
public void run()
{
//do something
while(b_quit == false)
{
buffer_len = inStream.read(buffer, 0, buffer.length);
if(buffer_len != buffer.length)
{
//do something
}
}
}

由一个按钮控制b_quit 的值 start stop 每个start 就会新建一个线程并启动new Thread().start();
现在的问题是:
当server端一直没有数据过来 我反复点击按钮(即b_quit 反复是true false)
第二次进入while(b_quit == false)时 read()返回-1
我知道 由于server端没有数据过来 read(buffer, 0, buffer.length);会使线程一直阻塞
那么像我这种情况该怎么处理:也就是说 第一次按下按钮b_quit == false 则read() 阻塞, 然后再按下按钮b_quit == true ,
这时候如何使read()退出阻塞状态。
...全文
639 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weinianjie1 2014-09-15
  • 打赏
  • 举报
回复

	/**
	 * 输入流的字节数据读取
	 * @param in
	 * @param msglen_rec
	 * @return
	 * @throws IOException
	 */
	private byte[] readBytesContent(DataInputStream input,int msglen_rec) throws IOException {
		int bytesRead = 0;
		int n = 0;
		int leftbytes = msglen_rec;
		byte[] in_b = new byte[msglen_rec];
		while (leftbytes > 0
				&& (n = input.read(in_b, bytesRead, leftbytes)) != -1) {
			bytesRead = bytesRead + n;
			leftbytes = msglen_rec - bytesRead;			
		}
		return in_b;
	} 

81,092

社区成员

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

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