Java笔记(18)NIO
1.NIO流
NIO是JDK1.4后出的一个新的流体系,它的实现原理与原来的IO流有很大的不同,可以通过将文件区域映射到内存中的方式来实现传输,因此它的效率要比IO流快很多。IO流与NIO的区别在于:IO是面向流的,而NIO是面向缓冲区的,并且在读写过程中IO流是阻塞式,而NIO可以通过选择器选择通道,是非阻塞式的。
Java NIO由以下几个核心部分组成
- Channels(通道)
- Buffers(缓冲区)
- Selectors(选择器)
Channels和Buffers (通道与缓冲区)
标准IO流通过字节流和字符流进行操作,而NIO通过通道和缓冲区对数据进行操作,在NIO中,数据总是从通道读入缓冲区中,或从缓冲区中写入通道。并且在NIO中,线程是非阻塞的,即在通道读取数据的时候,你还可以让线程去干其他的事情,不必像IO流中要一直等到数据读写完毕;
Channel是一个对象,可以通过它读取和写入数据。可以把它看做IO中的流。但是它和流相比还有一些不同:
- Channel是双向的,既可以读又可以写,而流是单向的
- Channel可以进行异步的读写
- 对Channel的读写必须通过buffer对象
在Java NIO中Channel主要有如下几种类型:
FileChannel:从文件读取数据的
DatagramChannel:读写UDP网络协议