当前位置: 代码迷 >> Java Web开发 >> inputstream.read 方法的阻塞有关问题
  详细解决方案

inputstream.read 方法的阻塞有关问题

热度:819   发布时间:2016-04-16 21:50:27.0
inputstream.read 方法的阻塞问题
本帖最后由 u013531487 于 2014-09-15 16:19:33 编辑
我现在将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()退出阻塞状态。
------解决思路----------------------

/**
 * 输入流的字节数据读取
 * @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;

  相关解决方案