版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处,并告知本人 https://blog.csdn.net/the_conquer_zzy/article/details/83056299
java1.4之前,java 对I/O支持并不完善,主要问题是:
- 没有数据缓冲区,I/O性能存在问题
- 没有c/c++ 中channel概念,只有输入输出流
- 同步阻塞I/O通信(BIO),通常会导致通信线程被长时间阻塞
- 支持的字符集有限,硬件可移植性不好
java 1.4修复了以上问题包括:
- 进行异步I/O操作的缓冲区 ByteBuffer
- 进行异步I/O操作的Pipe
- 进行I/O操作(同步或这异步)的channel,包括ServerSocketChannel和SocketChannel
- 多种字符集的编码能力和解码能力
- 实现非阻塞I/O的多路复用器selector
- 基于流行的perl实现的正则表达式类库
- 文件通道FileChannel
但是仍然存在一些不完善的地方,尤其是对文件系统的处理能力仍显不足,主要问题如下:
- 没有统一的文件属性(例如读写权限)
- API能力较弱。例如目录的连级的创建和递归遍历,往往需要自己实现
- 底层存储系统的一些高级API无法使用
- 所有的文件操作都是同步阻塞调用,不支持异步文件读写操作
直到2011年 jdk1.7的发布,带来了NIO2.0,解决了: - 提供能够批量获取文件属性的API,这些API具有平台无关性
- 提供AIO功能,支持文件的异步I/O操作和针对网络套接字的异步操作
- 完成JSR-51定义的通道功能,包括对配置和多播数据报的支持。