wade6 2013-10-30 20:02
浏览 1051
已采纳

关于nio中的SocketChannel.read()方法原理

发起请求的代码:

SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("http://www.test.com", 80));

1)如果请求返回的数据总量是1000byte;这时这1000byte是不是已经返回到客户端了?

 

从SocketChannel中读取数据:

int bytesRead = socketChannel.read(buf);

2)如果buf大小是1byte,只执行一次read方法后,那剩余的999byte数据在哪里呢?

  • 写回答

2条回答

  • scriptguy 2013-10-30 23:29
    关注

    1、tcp是流式管道,可能你读取的时候只有一部分数据返回了,一部分还在路上,read返回的时候说明有数据到来或者超时
    2、buffer小的话,对端发送的数据可能存在系统tcp协议的缓冲里,直到缓冲区填满

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制