一、NIO简介
Java NIO,通常称为 New IO 或 No Block IO, 是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。
注:JDK1.4的版本为 NIO 1.0, 而JDK7的版本为 NIO 2.0
二、NIO与传统IO的区别
1.传统IO是面向流的,NIO是面向缓冲区的。 单线程只能有一个客户端,虽然用线程池可以有多个客户端连接,但非常消耗性能。
Java 传统IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。若网速较慢,那么程序就一直等着,直到传输完成为止。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
2.传统IO的各种流是阻塞的。而NIO是非阻塞的。
Java传统IO阻塞意味着当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获