IBM开发者社区发表的Java NIO 入门资料:https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html
NIO与传统IO的区别
- 相同点:都是负责输入输出的;
- 区别:效率高低上,NIO比IO要快很多。
NIO为什么比IO快
- IO是以流一次一个字节的处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。
- NIO是以块的形式处理数据,每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。
NIO的用法
通道和缓冲区
通道 和 缓冲区 是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们。
(具体细节可以看看IBM的那篇文章)
NIO具体操作
以读文件为例:
- 创建InputStream对象打开文件;
- 从InputStream中获取Channel;
- 创建Buffer对象;
- 用第二步的Channel操作第三步的Buffer对象;
以写文件为例
- 创建OutputStream对象打开文件;
- 从OutputStream中获取Channel;
- 创建Buffer对象;
- 用第二步的Channel操作第三步的Buffer对象;
读写结合
Buffer对象,clear() 方法重设缓冲区,使它可以接受读入的数据。 flip() 方法让缓冲区可以将新读入的数据写入另一个通道。
Buffer缓冲区的内部实现与高级用法(分片、共享)
看IBM文档吧
联网和异步IO
用法:Selectors对象的使用,ServerSocketChannel对象的使用;
字符集
NIO对不同字符集也有考虑。