关于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个回答

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

        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();

            }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问