关于SocketInputStream.read()==-1的疑问
来源:8-1 消息不完整与消息粘包

狗肉是只猫
2020-02-21
老师,你好,从socket中获取到的inputStream读取数据时,什么时候会到达尾部呢
以如下代码为例:
InputStream inputStream = socket.getInputStream();
BufferedInputStream reader = new BufferedInputStream(inputStream);
ByteArrayOutputStream tmpwriter = new ByteArrayOutputStream();
byte[] bytes = new byte[64 * 1024 * 1024];
int i;
while ((i = reader.read(bytes)) != -1) {
tmpwriter.write(bytes, 0, i);
System.out.println(new String(tmpwriter.toByteArray(), StandardCharsets.UTF_8));
}
reader.read() 什么时候会等于-1呢,因为socket是长连接,从socket中获取到的inputStream在socket未关闭的情况下,会到达尾部吗?如果这样的话,我每次read到的包,是不是也存在粘包的情况。
写回答
1回答
-
Qiujuer
2020-02-24
默认情况下会等待对方传输数据过来才会继续往下走,否则阻塞状态。当然如果设置了超时,那么就会在超时时间到的时候抛出超时异常,
当对方断开时会得到0或-1.
00
相似问题