wade6
2013-10-30 20:02 阅读 861
已采纳

关于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 scriptguy 2013-10-30 23:29

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

    点赞 评论 复制链接分享
  • hxtao001 hxtao001 2013-10-30 23:13
            Charset charset = Charset.forName("UTF-8");
                while (socketChannel.read(buf) > 0) {
                    buf.flip();
                    CharBuffer charBuffer =                                         charset.decode(buf);
                                             System.out.println(charBuffer.toString());
    

    buf.clear();

                }
    
    点赞 评论 复制链接分享

相关推荐