在 Java 中使用套接字时,如何在开始处理它们之前判断客户端是否已完成所有(二进制)数据的发送。考虑例如:
istream = new BufferedInputStream (socket.getInputStream());
ostream = new BufferedOutputStream(socket.getOutputStream());
byte[] buffer = new byte[BUFFER_SIZE];
int count;
while(istream.available() > 0 && (count = istream.read(buffer)) != -1)
{
// do something..
}
// assuming all input has been read
ostream.write(getResponse());
ostream.flush();
我在 SO 上阅读过类似的帖子,例如this,但找不到确凿的答案。虽然我上面的解决方案有效,但我的理解是,您永远无法真正判断客户端是否已完成所有数据的发送。例如,如果客户端套接字发送了一些数据块,然后在它可以发送更多数据之前阻塞等待来自另一个数据源的数据,上面的代码很可能假设客户端已经完成了自 istream.available() 以来的所有数据的发送将为当前字节流返回 0。