0 0

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

发起请求的代码:

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数据在哪里呢?

2013年10月30日 20:02

2个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2013年10月30日 23:29
0 0

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

}

2013年10月30日 23:13

相关推荐

    【IT十八掌徐培成】Java基础第27天-02.NIO-ServerSocketChannel-SocketChannel.zip

    SocketChannel支持读写操作,可以通过`read(ByteBuffer)`和`write(ByteBuffer)`方法进行数据传输。与传统IO不同的是,NIO的读写操作是非阻塞的,这意味着如果无数据可读或无法写入时,线程不会被挂起,而是立即返回...

    java NIO详细教程

    Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java IO API在面对大量并发连接时存在的性能瓶颈。 ##### 使用...

    NIO项目源码.zip

    本项目源码包含了NIO相关的实现,通过分析这些代码,我们可以深入了解NIO的工作原理和实际应用。 1. NIO基础概念 - Channel(通道):NIO的核心组件,它代表了数据传输的路径,如文件、套接字等。通道是双向的,...

    android-socket-nio-master.zip

    "android-socket-nio-master.zip" 是一个关于Android中使用Socket结合NIO实现高效通信的项目,其目标是提高Socket通信的性能和处理大量并发连接的能力。 NIO(非阻塞I/O)是Java提供的一个替代传统I/O的API,主要...

    java nio Selector的使用-客户端

    Selector是Java NIO中的核心组件之一,它允许单个线程处理多个通道(channels)的读写事件,极大地提高了服务器的并发能力。本篇文章将深入探讨如何在Java NIO中使用Selector处理客户端的I/O请求。 首先,我们需要...

    Java NIO原理 图文分析及代码实现

    ### Java NIO原理 图文分析及代码实现 #### 前言 在深入探讨Java NIO之前,我们先简要回顾一下NIO的概念及其引入的原因。随着互联网的发展,越来越多的应用程序需要处理高并发的网络连接请求。传统的阻塞I/O模型在...

    JAVA NIO学习笔记.docx

    在这个例子中,`FileInputStream`和`FileOutputStream`创建了文件的输入和输出流,`FileChannel`获取了与文件的连接,`ByteBuffer`作为数据缓冲区,通过`clear()`、`read()`、`flip()`和`write()`方法实现了文件的...

    NIO 服务器客户端例子

    Java NIO(New IO)是Java 5及更高版本中引入的一个重要特性,它提供了与标准的Java IO API不同的I/O工作方式。NIO代表非阻塞I/O,它的核心特点是能够实现多路复用,使得一个单线程可以同时处理多个连接,极大地提高...

    Java_NIO-Selector.rar_java nio_selector

    Java NIO(非阻塞I/O)是Java标准库中的一种I/O模型,与传统的BIO(阻塞I/O)模型相比,它提供了更高效、更灵活的I/O操作方式。Selector是Java NIO框架中的核心组件,它使得单个线程能够管理多个通道(Channels),...

    bio-nio-aio.zip

    压缩包中的`demo3.txt`展示了如何使用NIO的`FileChannel`进行文件读写,而`demo4read.txt`和`demo4write.txt`则演示了如何利用`SocketChannel`进行网络通信。 三、反应器模式(Reactor) Reactor是Java NIO的一种...

    实现java网络与nio例子

    这个例子包含了NIO在网络通信中的应用,包括服务器端(Server)和客户端(Client)的实现。 在Java NIO中,核心组件有通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的途径,如套接字...

    Android开发进阶之NIO非阻塞包

    - **读取数据**:使用`socketChannel.read(ByteBuffer buffer)`从SocketChannel中读取数据。 - **发送数据**:使用`socketChannel.write(ByteBuffer buffer)`向SocketChannel中写入数据。 2. **ByteBuffer**:它...

    niodemo.zip

    5. **多路复用器(Selectors)的工作原理**:选择器首先通过`open()`方法创建,然后使用`register()`方法将通道与选择器关联,并设置关注的事件类型(如OP_READ、OP_WRITE、OP_CONNECT)。`select()`方法会阻塞,...

    java的ServerSocketChannel与SocketChannel的使用

    Java的`ServerSocketChannel`和`SocketChannel`是NIO(非阻塞I/O)框架中的核心组件,它们为创建高性能、高并发的网络服务提供了基础。在Java中,传统的I/O模型基于流(Stream),而NIO则引入了通道(Channel)和...

    使用Java NIO编写高性能的服务器.doc

    反应器模式是NIO中处理并发的关键设计模式。它将事件驱动的机制引入到I/O操作中,当有事件发生时,选择器(Selector)会通知事件处理器(Handler)进行相应处理。这样,服务器只需要一个线程就能轮询所有连接,有效...

    java-nio.rar_NIO_java nio

    - **NIO异步连接池**:利用Java NIO的非阻塞特性,可以在一个线程中管理多个连接,当请求到达时,无需等待连接建立完成,而是直接返回一个可用的连接,提高了服务响应速度。 4. **Java NIO的具体实现** - `java....

    tcp nio basics

    本篇文章将深入探讨TCP NIO的基本概念、工作原理以及如何通过示例代码(如NServer.java和NClient.java)来实现它们。 首先,TCP是一种面向连接的、可靠的传输协议,它确保数据在网络中的可靠传输,通过三次握手建立...

    nio socket编程java代码示例,客户端发送消息,服务端接收

    在Socket编程中,NIO使得服务器可以处理更多的连接请求,而无需为每个连接创建新的线程。 一、服务端实现 服务端的核心是创建一个ServerSocketChannel,监听指定的端口,并注册到Selector。当有新的连接请求时,...

Global site tag (gtag.js) - Google Analytics