dk1.6及之前都只实现BIO 和 NIO
jdk1.7开始支持AIO,即NIO 2.0
在BIO阻塞模式下server端:
1 new ServerSocket(int port) 监听端口
2 serverSocket.accept() 阻塞式等待客户端的连接,有连接才返回Socket对象
3 socket.getINputStream() 获取客户端发过来的信息流
4 socket.getOutputStream() 获取输出流对象,从而写入数据返回客户端
client端:
1 newSocket(String host,int port) 建立与服务器端的连接,如果服务器没启动,报Connection refused异常
2 socket.getInputStream() 读取服务器端返回的流
3 socket.getOutputStream() 获取输出流,写入数据发送到服务器端
在NIO模式下Server端:
1 ServerSocketChannel.open() 获取serverScoketChannel实例
2 serverScoketChannel.configueBlocking(false) 设置channel为非阻塞模式
3 serverSocketChannel.socket() 获取serverSocket对象
4 serverSocket.bind(port) 监听端口
5 Selector.open() 打开Selector,获取selector实例
6 serverSocketChannel.register(Selector,int) 向selector注册channel和感兴趣的事件
7 while(true) 循环以保证正常情况下服务器端一直处于运行状态
8 selector.select() 获取selector实例中需要处理的SelectionKey的数量
9 for(SelectionKey key:selector.selectedKeys()) 遍历selector.selectedKeys,以对每个SelectionKey的事件进行处理
10 key.isAcceptable() 判断SelectionKey的类型是否为客户端建立连接的类型
11 key.channel() 当SelectionKey的类型是acceptabel时,获取绑定的ServerSocketChannel对象
12 serverSocketChannel.accept() 接受客户端建立连接的请求,并返回SocketChannel对象
13 socketChannel.regiseter(Selector,int) 向Selector注册感兴趣的事件类型,如read,write
14 key.isReadable() 判断SelectionKey是否为readable,如是则意味着有消息流在等待处理
15 socketChannel.read(ByteBuffer) 从SelectionKey中绑定的SocketChannel对象读取消息流
16 socketChannel.write(ByteBuffer) 从SelectionKey中绑定的SocketChannel对象输出消息流
- 浏览: 587577 次
- 性别:
- 来自: 北京
最新评论
-
woshiicesky:
怎么使用的?
解决jdk1.7 不支持TLS1.2的问题 -
sunzbking:
哇!大佬谢谢分享解决问题啦
解决jdk1.7 不支持TLS1.2的问题 -
doren:
谢谢,很好解决我们的问题
解决jdk1.7 不支持TLS1.2的问题 -
贝塔ZQ:
PageOffice插件,挺好使得,可以试试
POI解析Excel 文件读取,修改,另存等功能 -
程俊2009:
需要用哪些jar,可以说下吗
jdom读写XMl文件
相关推荐
在Java编程中,IO模型是处理输入/输出操作的核心机制,包括了三种主要模型: Blocking I/O(BIO)、Non-blocking I/O(NIO)和Asynchronous I/O(AIO)。理解这三种模型的区别和应用场景对于优化Java程序的性能至关...
- **AIO(Asynchronous IO)**:也称为NIO.2,它提供了异步I/O操作,进一步提升了处理能力,使得程序无需等待I/O操作完成即可继续执行。 4. IO模型的选择: - 对于需要高并发、低延迟的服务器应用,如聊天服务器...
在Java的发展历程中,IO模型经历了三个主要阶段:BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO),这三种模型各自有其特性和适用场景,下面将详细解析它们的工作原理和区别。 **1. BIO(阻塞...
- **定义**:AIO是一种异步非阻塞的I/O模型,它进一步优化了NIO,使得I/O操作可以完全异步地完成。当客户端发起I/O请求时,由操作系统负责完成I/O操作并将结果返回给应用程序。 - **应用场景**:适用于连接数多且...
根据不同的实现方式,可以分为三种:BIO(Blocking I/O)、NIO(Non-Blocking I/O)和AIO(Asynchronous I/O)。 BIO(Blocking I/O) BIO方式是Java中最早的网络IO实现方式。它的工作原理是:每个TCP连接到达...
本文将深入探讨Java中的三种主要通讯模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),并结合实际的代码示例进行综合演练。 **一、BIO(阻塞I/O)** 1. **概念**:BIO是Java早期的...
在J2SE中,我们可以找到三种主要的IO模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),它们各自具有不同的特性和适用场景。 **BIO(Blocking I/O)**: BIO是传统的Java I/O模型,它...
Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...
AIO(Asynchronous I/O)是一种异步非阻塞的IO模型,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。AIO方式使用于连接数目多且连接比较长(重...
本章主要探讨了Java中的IO模型,包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),以及它们之间的区别和适用场景。此外,还深入讲解了阻塞与非阻塞、同步与异步的概念。 1. 阻塞与非...
AIO(Asynchronous I/O)是一种异步非阻塞的 IO 模式,服务器实现模式为一个有效请求一个线程,客户端的 I/O 请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。这种方式使用于连接数目多且连接比较长...
Java的IO模型从BIO到NIO再到AIO,逐步解决了并发处理和效率问题。Netty作为NIO的优秀实现,进一步简化了网络编程的复杂度。了解这些概念和框架,对于提升Java服务器应用的性能和可扩展性至关重要。
在Java中,有三种主要的I/O模型:BIO(Blocking I/O),NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景。 1. **BIO(阻塞I/O)** - BIO是最基础的I/O模型,它在Java早期...
本学习资料"io-study.7z"聚焦于三种主要的I/O模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),通过源码实例来帮助开发者深入理解它们的特点和适用场景。 1. **BIO(阻塞I/O)**: ...
为了应对这一挑战,Java提供了多种IO模型,包括BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO)。本文将详细介绍这些模型的特点及其应用场景。 #### 二、BIO(Blocking IO) ##### 2.1 定义...
Java支持三种不同的网络编程IO模式:BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)。 BIO(Blocking IO)是同步阻塞模型,每个客户端连接都会创建一个新的线程来处理。这意味着如果有很多连接,可能会消耗大量...
3. **AIO (Asynchronous IO)**: AIO,也称为 NIO 2,进一步优化了 I/O 模型,操作系统会在数据准备好后才通知服务器应用进行处理,减少了线程的等待时间,提高了处理效率。 NIO 的核心组件包括: - **Buffer**: ...
IO模型分为三种:BIO、NIO和AIO。BIO(Blocking IO)是最基础的同步阻塞模型,适用于连接数量较少的场景。在BIO中,每个客户端连接都会创建一个线程,当线程在IO操作中等待数据时会阻塞,这可能导致资源浪费和性能...
BIO是传统的同步阻塞模式,NIO提供了非阻塞的读写方式,提高了系统处理大量连接的能力,而AIO(Java 7引入的异步IO)进一步改进了NIO,使得用户可以注册事件监听,无需等待IO操作完成即可进行其他工作。 总结来说,...