关于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.

0
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2321 学习 · 476 问题

查看课程