使用套接字时的“流结束”是什么意思
在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的类似文章,但找不到一个确凿的答案。虽然我上面的解决方案有效,但我的理解是,你永远无法真正判断客户端是否已经完成了所有数据的发送。例如,如果客户端套接字发送了几块数据,然后块等待来自另一个数据源的数据,然后才能发送更多数据,则上面的代码很可能假设客户端已完成所有数据的发送,因为 istream.available() 将为当前字节流返回 0。