IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
来源:互联网 发布:ipad看电视最新软件 编辑:程序博客网 时间:2024/05/16 07:04
jdk1.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对象输出消息流
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对象数据
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- IO,BIO,NIO,AIO
- Java IO: BIO, NIO, AIO
- Java中网络IO的实现方式-BIO、NIO、AIO
- 【网络编程】(三)IO模型:BIO、NIO、AIO
- java io bio nio aio 详解
- java io bio nio aio 详解
- Java的IO:BIO | NIO | AIO
- java io bio nio aio 详解
- JAVA-IO模型(BIO,NIO,AIO)
- Java之IO,BIO,NIO,AIO
- Java IO知识:NIO,BIO,AIO
- Socket通信之BIO(同步阻塞IO)、PAIO(伪异步阻塞IO)、NIO(异步非阻塞IO)、AIO(异步非阻塞IO)、netty5之IO
- 传统的socket之BIO到伪异步IO到NIO最后到AIO简介
- Netty之BIO(同步阻塞IO)、PIO(伪异步阻塞IO)、NIO(异步非阻塞IO)、AIO(异步非阻塞IO)、Netty
- Netty之BIO(同步阻塞IO)、PIO(伪异步阻塞IO)、NIO(异步非阻塞IO)、AIO(异步非阻塞IO)
- Netty之BIO(同步阻塞IO)、PIO(伪异步阻塞IO)、NIO(异步非阻塞IO)、AIO(异步非阻塞IO)、Netty
- 写错了注入的bean 的get方法
- 画布
- 工厂三姐妹——创建型设计模式之二
- 后台跑程序
- HDU2478(Slides)求四边形矩阵交
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- 数字三角形问题
- Android4.2 系统服务系列之窗口服务---初始化
- 银行系统3(功能又强大了哟 增加了些功能(例如改密码)还在优化中。)
- 验证码
- NIO trick and trap NIO的技巧与陷阱
- la4727
- java代码中把多个文件打包成zip文件
- linux中的jiffies变量