NIO)库是在 JDK 1.4 中引入的。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就可以利用低级优化,这是原来的 I/O 包所无法做到的。
新的IO库提供的功能和工具很多,下面只是将本人用到的部分功能介绍下:
以前面用到的文本文件读写为例:
在I/O中,如果要读些一个文件很简单,只要打开文件读写就可以了:
但是如果使用NIO的库,则要复杂的多:
两者对比,可以轻易的发现差别,在NIO中多了Channel和ByteBuffer类,只是这点差距么?结果当然是否定的,如果只是代码的改变,我想NIO就没有存在的必要了,下面对比一下2份代码的运行时间,在读取一份33M的文本文件时,IO类中的方法花费了52346ms,而NIO类中的方法只花费了469ms,也就是说NIO的效率比IO类提高了10倍有余。
channel类:通道,和流最大的区别是,通道是双向的,而流是单向的,同时通道必须通过Buffer去操作,数据不能直接的放入通道。
提到Buffer,就不得不说NIO里提供的各种Buffer类
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
这些类几乎涵盖了所有的基本类型,这也就是说Channel+Buffer的组合可以对任意文件的操作。
众所周知,在电脑系统中,I/O的处理速度是最慢的,在程序涉及I/O操作时,必须不断地等待I/O操作的完成,造成效率低下,而使用Buffer则可以大幅缓解这个情况,只有当Buffer满或者Buffer空的时候才会对I/O进行请求,大幅提高程序的执行效率