赞
踩
系列文章:
系列文章:
Android NIO 系列教程(一) NIO概述
Android NIO 系列教程(二) – Channel
Android NIO 系列教程(三) – Buffer
Android NIO 系列教程(四) – Selector
Android NIO 系列教程(五) – FileChannel
Android NIO 系列教程(六) – SocketChannel
Android NIO 系列教程(七) – ServerSocketChannel
Android NIO 系列教程(八) --NIO简易聊天室
根据 英语原文 翻译过来,添加自己一些理解,英语好的,也可以直接阅读原文。
在 Socket 的教程 Android Socket 系列更新计划中,我们已经学习了 Socket 的基本使用和一些案例;但在多人聊天室中,我们已经知道,在百万级别的客户端连接时,无论服务端怎么优化,线程和IO阻塞问题已经存在;
所以,这里我们学习一下 JDK1.4之后引入的非阻塞 IO – NIO;他们的区别如下:
Java NIO 由以下核心部分组成:
基本上,所有NIO的IO都从一个 Channel 通道开始的,Channel 有点像流,可以从一个 Channel 读取数据到Buffer,也可以从Buffer 读数据到 Channel,如下图:
Channel 的种类有以下几种,包含了 TCP+UDP,网络和文件类型:
Buffer 的类型包含以下几种基础类型:
Selectors 允许单个线程处理多个Channel ,如果你的app打开了多个连接,但每个连接的流量都很低的情况下,使用 selector 是个不错的选择,比如聊天室。
下面是是一个 selector 连接 三个 channel 的案例:
使用 selector 之前,得向 selector 注册 channel,然后调用它的 select() 方法;该方法会一直阻塞,直到有注册channel准备就绪,一旦该方法有返回事件,则该线程就可以去处理这些事件,包括新连接、数据接收等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。