【发布时间】:2015-08-23 02:46:24
【问题描述】:
InputStream.read(byte[]) 方法如何知道是否已到达“流结束”并返回“-1”?
返回“-1”的全部条件是什么?
如何检测“流结束”(不发送包含之前要读取的总字节数的整数)?
使用示例:
InputStream input = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for(int size = -1; (size = input.read(buffer)) != -1; ) {
baos.write(buffer, 0, size);
}
【问题讨论】:
-
如果是TCP socket,因为对方已经发送TCP握手消息关闭连接。
-
如果它不是 TCP 套接字,它根本不会传递 -1,因为 Java 支持的唯一其他套接字是 UDP,它不是流协议,也没有流的结束。
-
@Nayuki 为什么要删除tcp 标签?这就是问题的意义所在。
标签: java sockets tcp inputstream