本文来说下JAVA NIO基础知识。
文章目录
NIO概述
NIO简介
New I/O,原因在于它相对于之前的I/O类库是新增的。由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O,所以,更多的人喜欢称之为非阻塞I/O(Non-block I/O)。
NIO的特性/NIO与IO区别
- 1)IO是面向流的,NIO是面向缓冲区的;
- 2)IO流是阻塞的,NIO流是不阻塞的;
- 3)NIO有选择器,而IO没有。
读数据和写数据方式:
- 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。
- 从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。
NIO核心组件简单介绍
- Channels
- Buffers
- Selectors
Java NIO 之 Buffer(缓冲区)
Buffer(缓冲区)介绍
- Java NIO Buffers用于和NIO Channel交互。 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels;
- Buffer本质上就是一块内存区;
- 一个Buffer有三个属性是必须掌握的,分别是:capacity容量、position位置、limit限制。
Buffer的常见方法
- Buffer clear()
- Buffer flip()
- Buffer rewind()
- Buffer position(int newPosition)
Buffer的使用方式/方法介绍
分配缓冲区(Allocating a Buffer)
ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子
写入数据到缓冲区(Writing Data to a Buffer)
写数据到Buffer有两种方法
1.从Channel中写数据到Buffer
int bytesRead = inChannel.read(buf); //read into buffer.
2.通过put写数据:
buf.put(127);
Buffer常用方法测试
说实话,NIO编程真的难,通过后面这个测试例子,你可能才能勉强理解前面说的Buffer方法的作用。
Java NIO 之 Channel(通道)
Java NIO之 Selector(选择器)
Selector(选择器)介绍
- Selector 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
- 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。
Selector(选择器)的使用方法介绍
模板代码
有了模板代码我们在编写程序时,大多数时间都是在模板代码中添加相应的业务代码。
Java NIO之拥抱Path和Files
NIO学习总结以及NIO新特性介绍
内存映射
这个功能主要是为了提高大文件的读写速度而设计的。内存映射文件(memory-mappedfile)能让你创建和修改那些大到无法读入内存的文件。有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问了。将文件的一段区域映射到内存中,比传统的文件处理速度要快很多。内存映射文件它虽然最终也是要从磁盘读取数据,但是它并不需要将数据读取到OS内核缓冲区,而是直接将进程的用户私有地址空间中的一部分区域与文件对象建立起映射关系,就好像直接从内存中读、写文件一样,速度当然快了。
AsynchronousFileChannel异步文件通
Java7中新增了AsynchronousFileChannel作为nio的一部分。AsynchronousFileChannel使得数据可以进行异步读写。
本文小结
本文详细介绍了java nio相关的知识与内容。