深入学习Netty(3)——传统AIO编程
前言
之前已经整理过了BIO、NIO两种I/O的相关博文,每一种I/O都有其特点,但相对开发而言,肯定是要又高效又简单的I/O编程才是真正需要的,在之前的NIO博文(深入学习Netty(2)——传统NIO编程)中就已经介绍过NIO编程的缺点(相比较而言的缺点:同步非阻塞,需要单独开启线程不断轮询),所以才会有真正的异步非阻塞I/O出现,这就是此篇博文需要介绍的AIO编程。
参考资料《Netty In Action》、《Netty权威指南》(有需要的小伙伴可以评论或者私信我)
博文中所有的代码都已上传到Github,欢迎Star、Fork
感兴趣可以先学习相关博文:
- 深入学习Netty(1)——传统BIO编程
- 深入学习Netty(2)——传统NIO编程
一、NIO 2.0与AIO编程
JDK 1.7升级了NIO类库,升级后的NIO类库称之为NIO 2.0,Java提供了异步文件I/O操作,同时提供了与UNIX网络编程事件驱动I/O对应的AIO。
NIO 2.0的异步套接字通道是真正的异步非阻塞I/O,对应有UNIX网络编程中的事件驱动I/O(AIO),相比较NIO,它不需要通过Selector对注册的通道进行轮询操作即可实现异步读写,简化了NIO的编程模型。
NIO 2.0提供了新的异步通道的概念,异步通道提供了以下两种方式获取操作结果:
- 通过juc.Futrue类来表示异步操作的结果。
AsynchronousSocketChannel socketChannel = AsynchronousSocketChannel.open(); InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 8080); Future<Void> connect = socketChannel.connect(inetSocketAddress); while (!connect.isDone()) {
Thread.sleep(10); }