`

IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)

    博客分类:
  • JAVA
 
阅读更多

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对象输出消息流

client端:
1 SocketChannel.open() 打开SocketChannel
2 SocketChannel.configureBlocking(false) 将SocketChannel配置为非阻塞模式
3 SocketChannel.connect(host,port) 连接到指定的目标地址
4 Selector.open() 打开Selector
5 SocketChannel.register(Selector,int) 向Selector注册感兴趣的事件,connected,read,write
6 while(true) 循环执行保证客户端一直处于运行状态
7 Selector.select() 从Selector中获取是否有可读的key信息
8 for(SelectionKey key:selector.selectedKeys()) 遍历selector中所有selectedKeys
9 SelectionKey.isConnectable() 判断是否为连接建立的类型
10 SelectionKey.channel() 获取绑定的SocketChannel
11 SocketChannel.finishConnect() 完成连接的建立(TCP/IP的三次握手)
12 SelectionKey.isReadable() 判断是否为可读类型
13 SelectionKey.channel() 获取绑定的SocketChannel
14 SocketChannel.read(ByteBuffer) 从SocketChannel中读取数到ByteBuffer中
15 SocketChannel.write(ByteBuffer) 向SocketChannel中写入ByteBuffer对象数据
分享到:
评论

相关推荐

    Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析

    在Java编程中,IO模型是处理输入/输出操作的核心机制,包括了三种主要模型: Blocking I/O(BIO)、Non-blocking I/O(NIO)和Asynchronous I/O(AIO)。理解这三种模型的区别和应用场景对于优化Java程序的性能至关...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    - **AIO(Asynchronous IO)**:也称为NIO.2,它提供了异步I/O操作,进一步提升了处理能力,使得程序无需等待I/O操作完成即可继续执行。 4. IO模型的选择: - 对于需要高并发、低延迟的服务器应用,如聊天服务器...

    一文彻底理解Java中IO的BIO、NIO、AIO

    在Java的发展历程中,IO模型经历了三个主要阶段:BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO),这三种模型各自有其特性和适用场景,下面将详细解析它们的工作原理和区别。 **1. BIO(阻塞...

    2024年Java常见的-BIO,NIO,AIO,Netty面试题

    - **定义**:AIO是一种异步非阻塞的I/O模型,它进一步优化了NIO,使得I/O操作可以完全异步地完成。当客户端发起I/O请求时,由操作系统负责完成I/O操作并将结果返回给应用程序。 - **应用场景**:适用于连接数多且...

    Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    根据不同的实现方式,可以分为三种:BIO(Blocking I/O)、NIO(Non-Blocking I/O)和AIO(Asynchronous I/O)。 BIO(Blocking I/O) BIO方式是Java中最早的网络IO实现方式。它的工作原理是:每个TCP连接到达...

    Java通讯模型-BIO、NIO、AIO综合演练

    本文将深入探讨Java中的三种主要通讯模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),并结合实际的代码示例进行综合演练。 **一、BIO(阻塞I/O)** 1. **概念**:BIO是Java早期的...

    复习 J2SE基本内容 IO NIO AIO 的区别

    在J2SE中,我们可以找到三种主要的IO模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),它们各自具有不同的特性和适用场景。 **BIO(Blocking I/O)**: BIO是传统的Java I/O模型,它...

    BIO、NIO、AIO

    Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...

    BIO,NIO,AIO,Netty面试题 35道.pdf

    AIO(Asynchronous I/O)是一种异步非阻塞的IO模型,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。AIO方式使用于连接数目多且连接比较长(重...

    03-04-01-Java IO演进之路1

    本章主要探讨了Java中的IO模型,包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),以及它们之间的区别和适用场景。此外,还深入讲解了阻塞与非阻塞、同步与异步的概念。 1. 阻塞与非...

    BIO,NIO,AIO,Netty面试题 35道,面试通关宝典

    AIO(Asynchronous I/O)是一种异步非阻塞的 IO 模式,服务器实现模式为一个有效请求一个线程,客户端的 I/O 请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。这种方式使用于连接数目多且连接比较长...

    BIO,NIO,AIO,Netty面试题 35道1

    Java的IO模型从BIO到NIO再到AIO,逐步解决了并发处理和效率问题。Netty作为NIO的优秀实现,进一步简化了网络编程的复杂度。了解这些概念和框架,对于提升Java服务器应用的性能和可扩展性至关重要。

    java网络编程源码-java-IO:java网络编程BIO,NIO,AIO源码示例

    在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

    本学习资料"io-study.7z"聚焦于三种主要的I/O模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),通过源码实例来帮助开发者深入理解它们的特点和适用场景。 1. **BIO(阻塞I/O)**: ...

    IO模型介绍,理解java常见的IO模型

    为了应对这一挑战,Java提供了多种IO模型,包括BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO)。本文将详细介绍这些模型的特点及其应用场景。 #### 二、BIO(Blocking IO) ##### 2.1 定义...

    Java IO相关基础知识简介

    Java支持三种不同的网络编程IO模式:BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)。 BIO(Blocking IO)是同步阻塞模型,每个客户端连接都会创建一个新的线程来处理。这意味着如果有很多连接,可能会消耗大量...

    Netty面试专题及答案.pdf

    3. **AIO (Asynchronous IO)**: AIO,也称为 NIO 2,进一步优化了 I/O 模型,操作系统会在数据准备好后才通知服务器应用进行处理,减少了线程的等待时间,提高了处理效率。 NIO 的核心组件包括: - **Buffer**: ...

    计算机网络常考.pdf

    IO模型分为三种:BIO、NIO和AIO。BIO(Blocking IO)是最基础的同步阻塞模型,适用于连接数量较少的场景。在BIO中,每个客户端连接都会创建一个线程,当线程在IO操作中等待数据时会阻塞,这可能导致资源浪费和性能...

    IO流讲解-LingRan.pptx

    BIO是传统的同步阻塞模式,NIO提供了非阻塞的读写方式,提高了系统处理大量连接的能力,而AIO(Java 7引入的异步IO)进一步改进了NIO,使得用户可以注册事件监听,无需等待IO操作完成即可进行其他工作。 总结来说,...

Global site tag (gtag.js) - Google Analytics