我正在读取客户端发送的数据的服务器上工作,但是大小未知,我也不能更改客户端发送大小。
我想从客户端读取数据,直到它阻塞并等待服务器的响应。我尝试使用available()
,它有时会起作用,但有时即使流中有一些数据它也只会返回零。
while((len = in.available()) != 0)
in.read(b,0,len);
用Java有什么办法做到这一点?我知道异步方法,但从未尝试过这样做,所以如果有人可以提供一个简短的示例。
使用available()
是唯一不使用异步方法的方法。
您实际上并不需要依赖available()
; 返回的值。只需检查是否有可用的“某些”数据,以确保read
不会阻塞。但是,您必须检查返回的值read
(读入数组的实际字节数):
// Process all data currently available
while (in.available() != 0)
{
int nb = in.read(b);
// Process nb bytes
}
请注意,available
返回0并不意味着已到达数据的结尾-只是意味着没有可立即使用的数据(数据可能在下一毫秒变为可用)。因此,您需要具有其他机制才能使服务器知道客户端将不再发送任何数据,而是在等待响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句