【发布时间】:2016-01-22 07:05:35
【问题描述】:
以下代码应检测到没有更多字节要读取。然而,它只是挂起,直到客户端连接关闭。
服务器
//...
StringBuilder builder = new StringBuilder(128);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = socket.getInputStream().read(buffer)) != -1) {
System.out.println(length);
builder.append(new String(buffer));
System.out.println(builder.toString());
}
客户
//...
OutputStream stream = clientSocket.getOutputStream();
stream.write("LIST".getBytes());
stream.flush();
API 和关于此类问题的先前答案指出 -1 应该意味着没有要读取的字符,但是这个循环写道:
4
列表
挂起 20 秒,直到客户端关闭套接字并选择 -1 以终止循环。
我怎样才能正确检测到流中没有更多字符?
此后连接应保持打开状态。
我可以提前发送字节数或特殊字符,但是即使连接仍然处于活动状态,是否有可能检测到不再有任何内容可读取。
【问题讨论】:
-
我尝试使用 0,但无论如何它都会挂起。
-
@vlp -1 在 Java 中。
InputStream.read()不能返回零,除非您提供零长度缓冲区或零计数。