我现在将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;
}