我正在开发服务器客户端应用程序,并且在等待输入流上的输入数据时遇到问题。Java InputStream等待数据。
我有专用于读取输入数据的线程。目前它使用while循环来保持数据可用。 (N.B.协议如下:发送数据包的大小,比如说N,然后发送N个字节)。
public void run(){
//some initialization
InputStream inStream = sock.getInputStream();
byte[] packetData;
//some more stuff
while(!interrupted){
while(inStream.available()==0);
packetData = new byte[inStream.read()];
while(inStream.available()<packetData.length);
inStream.read(packetData,0,packetData.length);
//send packet for procession in other thread
}
}
它的工作原理,但通过while循环阻塞线程是一个坏主意。我可以使用Thread.sleep(X)来防止循环连续消耗资源,但肯定有更好的方法。
另外我不能依赖InputStream.read来阻塞线程,因为数据的一部分可能由服务器发送延迟。我尝试过,但总是会导致意外的行为。
我会很感激的任何想法:)
InputStream.read已经当数据不可用块。所以放弃'可用'方法。 – UmNyobe 2012-03-12 12:17:43