我正在开发服务器-客户端应用程序,但在等待输入流数据方面遇到了问题。
我有一个专门用于读取输入数据的线程。目前它使用while循环来等待数据是否可用。(注意:协议如下:先将数据包大小作为int发送,然后发送N个字节)。
我有一个专门用于读取输入数据的线程。目前它使用while循环来等待数据是否可用。(注意:协议如下:先将数据包大小作为int发送,然后发送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来阻塞线程,因为部分数据可能会由服务器延迟发送。我已经尝试过,但总是导致意外行为。
我会感激任何想法 :)
available
方法。 - UmNyobe